《高性能MySQL》读书笔记(一)------ 数据库引擎

MySQL服务器由连接管理、查询缓存、SQL解析器、查询优化器以及数据存储引擎组成。其基本架构如下图所示:

图1.MySQL服务器的基本架构

其中,数据库引擎负责表的存储,索引的组织。表的存储结构以及索引的形式是由数据库引擎来完成的。MySQL发布时,自带两个数据库引擎:MyISAM、InnoDB。我们可以在my.ini配置文件中修改MySQL的默认引擎,也可以在创建表的时候,明确地指明所使用的数据库引擎。其中MyISAM是MySQL默认的数据库引擎。

 

--my.ini配置文件中设置默认数据库引擎
default-storage-engine=MyISAM

--在创建表的时候明确指明数据库引擎
create table [tableName]{
    ......
} use innodb 
 

MyISAM:不支持行级加锁,不支持事务,适合于大量查询与插入的场景应用。MyISAM将索引和表分别存放,分别存储为MYI、MYD文件。MyISAM有以下特点:

1、支持对整张表进行加锁,但不能对行加锁。读取时使用共享锁,写入时使用排它锁。由于插入操作不会影响原有数据,正在插入的数据也不会被并发读取(聚集操作除外),所以,插入是一种特殊的写入操作,与读取并不排斥。

2、MyISAM支持数据库表的自动修复和手工修复(##待考)。
3、可以对基于blob或者text类型表建立最长为500的前缀索引。 
4、索引可以延迟更新,先更新内存里的索引,直到只有在flush或者关闭表的时候,才将索引转储到磁盘。启用此特性,需要在表创建的时候使用delay_key_write选项。
5、MyISAM不支持外键引用。
InnoDB:支持事务的存储引擎。较MyISAM存储引擎较稳定。使用mvcc机制来进行事务的并发控制,较加锁来实现事务而言提高了速度。 InnoDB有以下特点:
1、支持对表、行进行加锁。
2、使用聚集索引的形式来存储数据和索引,索引和表混生。维持多个非主键索引,在非主键索引中存储主键。这意味着在利用非主键索引进行查询的时候,可能(使用可能的隐喻是:如果索引提供了足够的信息,可能查询就只使用了索引) 还需要利用主键索引来完成进一步的操作。
3、使用预读来减少I/O次数。
4、使用内存哈希索引提高查找速度。
5、提供了插入缓冲池,来应对聚集索引在插入时的低效。

数据库引擎的不同特性,是数据库引擎选择时的考量
1、应用是否需要事务支持。
2、应用的各类操作的查询频率。如果应用大量查询和插入,而更新和删除频率很低,使用MyISAM。
3、因为数据库引擎才是进行数据管理的模块,数据引擎的选择直接影响数据库的运维成本。尽量选择容易恢复与备份的数据库引擎。
4、数据引擎的其他特性。MyISAM不支持外键,但是有另外一个特性,支持FULLTEXT特性,再两者相较的时候需要权衡选择

猜你喜欢

转载自sunshadow1992.iteye.com/blog/1684312