mysql的架构,参考官方文档中的图。
内存部分:
<1> 连接池:连接管理。
<2> sql接口:存储procedure,view,trigger的编译后的代码,以及解析后的sql代码
<3> 解析器:解析sql
<4> 优化器:优化sql,信息统计
<5> cache和buffer
<6> 管理和通用部分:备份,恢复,安全,复制,集群,管理,配置,移植,元数据。
<7> 最下层是存储引擎,对内存,索引,存储进行管理。
这个结构与oracle貌似也差不多,嵌入式的存储引擎的确是mysql特有的。
文件系统部分:
redo,undo,data,index,binary,error,query,slow。
>>读的是mysql5.1中文版,发现mysql的小版本之间差异还是挺大的。
>>下面是第一章的一些摘要和笔记。
1.4.2 mysql主要特性
? 提供了事务性和非事务性存储引擎。
? 使用了极快的“B树”磁盘表(MyISAM)和索引压缩。
>> 关注。。。
? 添加另一个存储引擎相对简单。如果打算为内部数据库添加一个SQL接口,该特性十分有用。
>> 关注。。。
? 通过使用优化的“单扫描多连接”,能实现极快的连接。
? 存储器中的哈希表用作临时表。
? 列类型:
FLOAT,DOUBLE,CHAR,VARCHAR,TEXT,BLOB,DATE,TIME,DATETIME,TIMESTAMP,YEAR,SET,ENUM
>> DATE,TIME,DATETIME,TIMESTAMP四种时间类型
定长和可变长度记录
>>这个难道不是char和varchar?
? 语句和函数
? 支持函数。
>>不支持函数也太弱了
? 对SQL GROUP BY和ORDER BY子句的全面支持。支持聚合函数(COUNT(), COUNT(DISTINCT ...),AVG(),STD(),SUM(),MAX(),MIN()和GROUP_CONCAT())。
>> STD()啥意思
>> GROUP_CONCAT()该函数返回带有来自一个组的连接的非NULL值的字符串结果。用处大吗
? 支持LEFT OUTER JOIN和RIGHT OUTER JOIN
? DELETE、INSERT、REPLACE和UPDATE返回更改(影响)的行数。连接到服务器时,可通过设置标志返回匹配的行数。
>> 这个很有用处。Oracle记得是需要间接获取。
? MySQL的SHOW命令可用于检索关于数据库、数据库引擎、表和索引的信息。EXPLAIN命令可用于确定优化器处理查询的方式。
>>show 查看对象信息。Explain执行计划。
? 函数名与表名或列名不冲突。
>>这个做表设计时需要留意
? 可以将不同数据库的表混合在相同的查询中
>> 可以使用“db_name.tbl_name”语法访问不同数据库中的表
? 安全
连接到服务器时,所有的密码传输均采用加密形式
? 可伸缩性和限制
? 处理大型数据库。可将MySQL用于含60000个表和约50亿行的数据库。
? 每个表可支持高达64条索引,。每条索引可由1~16个列或列元素组成,大索引宽度为1000字节
>>索引太多,联合索引都对性能影响很大。虽然支持这么多,但不能用这么多。
? 客户端和工具
通过mysqlcheck客户端,可在命令行上使用这类语句。MySQL还包括myisamchk,这是一种很快的命令行实用工具,可用于在MyISAM表上执行这类操作。
1.4.4 MySQL表最大能达到多少
MyISAM存储引擎MQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。
InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间的最大容量为64TB。
可以使用SHOW TABLE STATUS语句或myisamchk -dv tbl_name检查表的最大尺寸
1.8.4. MySQL对标准SQL的扩展
可以使用标准的系统命令来备份、重命名、移动、删除、并拷贝由MyISAM或ISAM存储引擎管理的表。例如,要想重命名MyISAM表,可重命名表对应的.MYD、.MYI、以及.frm文件。
在字符串中使用“\”作为转义字符
o ANALYZE TABLE,CHECK TABLE,OPTIMIZE TABLE,以及REPAIR TABLE语句。
>>分析检查优化修复表的语法
o CREATE DATABASE和DROP DATABASE语句。
>>创建database
o DO语句。
>>while do?
o EXPLAIN SELECT获取如何联合表的介绍。
>> 查看查询执行计划
o FLUSH和RESET语句。
>> ?
o SET语句。
>> 设置参数?
o SHOW语句。
>> show各种对象,参数
o 使用LOAD DATA INFILE。在很多情况下,该语法与Oracle的LOAD DATA INFILE兼容。
>> 将数据写到文件。
o RENAME TABLE的使用。
o 使用REPLACE取代DELETE + INSERT。
o 在ALTER TABLE语句中使用CHANGE col_name、DROP col_name、或DROP INDEX、IGNORE或RENAME。在ALTER TABLE语句中使用多个ADD、ALTER、DROP或CHANGE子句。。
o 使用索引名,字段前缀上的索引,并在CREATE TABLE语句中使用INDEX或KEY。
o 与CREATE TABLE一起使用TEMPORARY或IF NOT EXISTS。
o 与DROP TABLE一起使用IF EXISTS。
>> 这两个是直接在create和drop表增加了检查。
o 使用单个DROP TABLE语句,能够舍弃多个表。
o INSERT和REPLACE语句的DELAYED子句。
>>insert DELAYED 将insert的执行权限降低,当有其它处理(如select)
>>时,先处理其它,空闲时再insert.insert into即为直接执行,使用
>>DELAYED可以在一定程序上改善性能
o INSERT、REPLACE、DELETE和UPDATE语句的LOW_PRIORITY子句。
>>改变语句调度的优先级。
>>从设计角度来说这个和delayed应该是少用为好。
o 在SELECT语句中使用INTO OUTFILE和STRAIGHT_JOIN。
o SELECT语句中的SQL_SMALL_RESULT选项。
o 不需要在GROUP BY部分命名所有选择的列。对于某些十分特殊但相当正常的查询,它能提供更好的性能。
o 可以与GROUP BY一起指定ASC和DESC。
1.8.5.5.外键
InnoDB存储引擎支持对外键约束的检查功能,这些约束包括CASCADE、ON DELETE和ON UPDATE。
1.8.5.5.view,procedure,trigger
支持存储过程和trigger
1.8.5.5.注释
--为注释
1.8.6.MySQL处理约束的方式
1.8.6.1.PRIMARY KEY和UNIQUE索引约束
如果想忽略约束,用于INSERT和UPDATE的IGNORE关键字。使用mysql_info() C API函数,能够获取关于实际插入或更新行数的信息。
1.8.6.2. 对无效数据的约束
MySQL的默认行为和严格的SQL模式,如null,日期转换,长度超长等。
>>最新版本的mysql默认模式还不是严格模式么?严格模式会好一些吧。待后续确认。
1.8.6.3. ENUM和SET约束
非严格模式ENUM和SET不是实际约束。
第一章小结:
主要介绍了mysql的一些特性功能,总体感觉mysql做的更灵活,但是灵活的坏处也是不够规范,犯错了概率加大了。
对于一些涉及调度之类的特性,不太建议使用。