mysql

加锁处理分析:http://hedengcheng.com/?p=771

索引:

CREATE TABLE People (

last_name varchar(50)    not null,

first_name varchar(50)    not null,

dob        date          not null,

gender    enum('m', 'f') not null,

key(last_name, first_name, dob)

);

(1) 查询必须从索引的最左边的列开始。例如你不能利用索引查找在某一天出生的人。

(2) 不能跳过某一索引列。例如,你不能利用索引查找last name为Smith且出生于某一天的人。

(3) 存储引擎不能使用索引中范围条件右边的列。例如,如果你的查询语句为WHERE last_name="Smith" AND first_name LIKE 'J%' AND dob='1976-12-23',则该查询只会使用索引中的前两列,因为LIKE是范围查询。

(4) 仅对索引进行查询(Index-only queries):如果查询的列都位于索引中,则不需要读取元组的值

聚簇索引 非聚簇索引:

Innodb 支持事务处理与外键和行级锁.而MyISAM不支持;

MyISAM不支持聚簇索引;

聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。

区别:聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针

主键索引、二级索引:

聚簇索引中的每个叶子节点包含primary key的值,事务ID和回滚指针(rollback pointer)——用于事务和MVCC,和余下的列(如col2)

二级索引与聚簇索引有很大的不同。InnoDB的二级索引的叶子包含primary key的值,而不是行指针(row pointers),这减小了移动数据或者数据页面分裂时维护二级索引的开销,因为InnoDB不需要更新索引的行指针

MySQL中,有两种方式生成有序结果集:一是使用filesort,二是按索引顺序扫描

推荐阅读更多精彩内容