1.InnoDB存储引擎包括聚集索引和非聚集索引。
5.5之后默认的是InnoDB.支持事务。
MyISAM非聚集索引,不支持事务。
根本区别:表记录的排列顺序与索引的排列顺序是否一致。
1.1聚集索引:聚集索引一般是表中的主键索引,如果表中没有显示指定主键,则会选择表中的第一个不允许为NULL的唯一索引,如果还是没有的话,就采用Innodb存储引擎为每行数据内置的6字节ROWID作为聚集索引。
1.2非聚集索引:非聚集索引索引项顺序存储,但索引项对应的内容却是随机存储的。一个表可以有多个非聚集索引。
除了聚集索引以外的都是非聚集索引。
1.3两者的叶子节点:聚集索引的叶子节点就是对应的数据节点。
非聚集索引的叶子节点仍然是索引节点。只有一个指针指向对应的数据块。
聚集索引在精确查找和范围查找方面具有良好性能。因此要选择具有实际意义的id当聚集索引。
1.4非聚集索引层次多。聚集索引,往表里边插数据,他会按序插入。非聚集索引则不会。
都采用B+树结构。
2.需要弄清楚的问题。
2.1聚集索引的约束是唯一性,不要求字段也是唯一的?
聚集索引可以创建在任何一列想要创建的字段上。从实际出发,还是要对字段唯一列进行创建索引(一般主键都是唯一的)。
2.2为什么聚集索引可以创建在任何一列上?(没明白)
如果未使用 UNIQUE 属性创建聚集索引,数据引擎将向行自动添加一个uniqueifier值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。(这意思是不是说就会有重复的数据行)。
2.3聚集索引不一定比非聚集索引性能更优?
比如想查询成绩在70-90之间学生的学分以及姓名,想要得到的只有两列。可以在学分和姓名上创建联合非聚集索引。最终输出的数据就是想要得到的。
2.4在数据库中通过什么描述聚集索引与非聚集索引的?
索引是通过二叉树。区分两者主要是通过叶子节点。
2.5在主键是创建聚集索引的表在数据插入上为什么比主键上创建非聚集索引表速度要慢?(我理解的分析一下对不对?)
插入:因为在有主键的表中插入数据,受主键唯一性约束,要保证插入的数据没有重复。
查找:聚集索引由于索引节点就是数据页。想检查主键唯一性。遍历所有叶子节点才行。而非聚集索引上已经包含了主键值。只需要遍历所有的索引页就行(索引的存储空间比实际数据要少)。
非聚集索引的二次查找:就是当要查找的列,不是索引的时候。如果是索引的话,可以直接从非聚集索引的节点里就可以获取到查询列的数据。