MySql索引
数据库索引是一种提高数据查询效率的数据结构
数据结构示例地址:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
- 二叉树:
这种数据结构,缺点是如果插入递增的数据,会导致整个结构一侧长度递增.
数据结构演示地址:
https://www.cs.usfca.edu/~galles/visualization/BST.html - 红黑树:
而红黑树解决了这个问题,红黑树会再进行插入后,会对树结构进行重新绘制,这样就避免了二叉树的问题,但是红黑树也同样存在问题,就是当数据量较大时,树的结构会比较深,也会经过多次查找,导致查询效率也不高。
数据结构演示地址:
https://www.cs.usfca.edu/~galles/visualization/RedBlack.html - B-Tree:
再一个层级中添加多个标记节点,这样可以减少数据层级。B-Tree的数据层级较少。
数据结构演示地址:
https://www.cs.usfca.edu/~galles/visualization/BTree.html - B+Tree
B+Tree在B-Tree上再次进行优化,将所有数据都保存到叶子节点上,非叶子节点存储冗余索引。
数据结构演示地址:
https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
中B+tree索引,一个节点中可以保存多个索引数据,中间用来保存下个索引的地址,索引节点中不保存数据,而所有数据都保存到内存中。这样可以加快节点的扫描速度。
MySql存储引擎
InnoDB存储引擎
InnoDB存储引擎数据存储分为两个文件*.frm,*.idb,frm存储数据结构,idb存储索引和数据。
InnoDB存储引擎中的主键索引叶子节点包含了完整的数据结构。而非主键索引的叶子节点中包含的是主键索引的叶子节点,主要是为了保持一致性和节省空间。
MyIsam存储引擎
MyIsam存储引擎采取的是数据和索引分离的,分为3个文件,.frm,.MYD,*.MYI,frm用来保存数据结构,MYD用来保存数据,MYI用来保存索引。
Myisam中不存在
总结:
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;