mysql索引的优化
普遍索引的简单优化
索引种类
索引 | 作用 |
---|---|
主键索引 | 非空唯一,普通表中一般会有一个主键索引,用来标识唯一性的一条数据 |
唯一索引 | 和主键索引不同的是可以出现空 null |
普通索引 | 可以出现相同的值 |
组合索引 | 多个不同列组合起来,大于等于2列 |
全文索引 | 全文索引就是反向索引,具体一列文字关键字中查询,一般是长字符串 |
备注:存储的结构是B+树【多路平衡搜索树】
B+树 作用
1.加快索引检索速度
2.减少层高,减少磁盘IO
一次磁盘IO 比内存查询慢得多
IO :输入输出
特征
1.叶子节点存储的是数据具体信息
2.非叶子节点存储的是索引信息
3.叶子节点相关联,减少磁盘IO,不需要返回查父节点再查下一个叶子节点,
方便范围查找,避免一些无用的磁盘IO
好处:索引的检索信息少查询快
一个索引节点 16K
创建索引消耗
两个索引方式
1.聚集索引
2.辅助索引
1.主键索引
对应索引-聚集索引
数据也是索引的一部分,叶子节点存储了行数据。
B+树 根节点索引信息
1 | 10 | 20 |
---|---|---|
节点1 | 节点2 | 节点3 |
如:查询范围 1-10
只需要查询到节点1 到节点2,如此类推 每个节点查询范围相同。
如:查询范围 1-18
查询节点1 然后查询 节点3 下面小于等于 18的节点,如此类推
2.非主键索引
对应索引-辅助索引
非主键索引都是辅助索引
1.叶子节点存储了主键信息
2.辅助索引找到主键信息,根据主键信息再找到行数据
3.优化
3.1尽量使用段索引
说明:字节数据相对较少的字段
3.2 长字符的字段
说明: 1.可以用前面几个字符作为索引
2.可以用全文索引
3.3 索引创建不宜过多
说明:可以使用组合索引,扩展索引,几个字段做一个索引
3.4 不能对索引列运算
说明:运算后索引失效
3.5 不能隐式转换
说明:索引失效,如:数字1 转字符1 -> ‘1’
3.6 尽量查询有索引字段
说明:满足覆盖索引走索引
4.最左原则
在组合索引出现
索引:
索引a | 索引b | 索引c |
---|
可以用到索引情况
顺序
A 》 B 》 C
A 》C 只用到A索引
不可以用到
C 》 B 》A
说明:从左到右,满足前面的条件才会使用到;
备注:MYSQL 中有主键适配器会重新排序顺序;explain 在sql前查询 执行计划
explain select * from x
5.覆盖索引
全部查询字段都有索引,走辅助索引。
如:
字段a | 字段b | 字段c | 字段d | 字段e |
---|---|---|---|---|
索引 | 索引 | 索引 | 索引 |
查询