mysql用的较多的索引结构是b+树 ,它的特性是:
1、B+树将所有的查找结果放在叶子节点中,这也就意味着查找B+树,就必须到叶子节点才能返回结果;
2、B+树每一个节点的关键字个数和子树指针个数相同;
3、B+树的非叶子节点的每一个关键字对应一个指针,而关键字则是子树的最大,或者最小值;
4、所有非叶子节点都可以看做是key的索引部分
怎么建索引,索引设计原则
- 对查询频次高,数据量大的
- 索引字段的选择,经常在where子句中的
- 使用唯一索引,区分度越高,索引效率越高
- 不是越多越好,因为占存储空间,增加、更新、删除的时候需要维护
- 使用短索引,减少存储
- 利用最左前缀,(复合索引的使用)
索引优化
- 组合索引,最左前缀法则
- 范围查询,范围字段右边的列不使用索引
- 不要在索引列上进行运算操作,否则索引失效
- 字符串不加单引号,索引失效
- 尽量使用覆盖索引,避免select *(目的是避免回表查询)
- or索引失效,如果or前面的列用了索引,但是or后面的列没有索引,那么索引失效
- 以%开头like模糊查询,索引失效。如果%在后面则索引生效。可以使用覆盖索引的方式解决
- 如果mysql评估使用索引比全表扫描更慢,则不使用索引
- is null,is not null有时候走索引,有时候不走索引,主要是看走索引是否比全表快
- in走索引,not in不走索引
- 尽量使用复合索引,而少使用单列索引
希望对您有所帮助
最新评论