索引失效情况:
- 复合索引未用左列字段;
- 有or;
- like以%开头;
- 需要类型转换;
- where中索引列有运算;
- where中索引列使用了函数;
建索引原则
- 唯一性差的不用(比如性别,只有2种);
- 频繁更新的字段不用(更新索引消耗);
- 选择where用的字段, group by, order by常用的字段;
- 索引使用<>时,效果一般;
https://www.cnblogs.com/liehen2046/p/11052666.html
Mysql索引使用B+树
B+树和B树区别:
-
B+树中只有叶子节点会带有指向记录的指针(ROWID),而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
-
B+树中所有叶子节点都是通过指针连接在一起,而B树不会。
B+树优点:
-
B+树的磁盘读写代价更低 B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
-
B+树的查询效率更加稳定 由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
-
“B+树还有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持范围查询非常方便,而B树不支持。这是数据库选用B+树的最主要原因。