Day 43 索引优化实战

2022-05-18  本文已影响0人  小周爱吃瓜

第一个字段>符号不走索引.

覆盖索引
in or 数据量。

取决于表记录

a like 'li%' b = 1 c = m
等值查询就会做调整与优化,这里走name字段过滤数据,得到的b 和 c是无序的。 无法很好的利用索引。

5.6 前需要回表才能解决.

5.6 之后下推到存储引擎层.

但也不是绝对的,数据量小的时候才会走索引,大的时候不一定会走索引下推.

trace工具

打开后查询,可以可看到扫描的行数,cpu和io成本.

order by: 索引


Using index 扫描索引本身完成排序,index效率高,filesort效率低.

order by 最左前缀。

group by xxx order by null.
where 优先级高于Having,在where层做过滤

比如name = 'zhuge' order pos.

  1. 单路排序:
    通过name = xxx 找到主键id.
    根据id然后取出来所有数据,再根据name做查找;
    单路取出来所有数据。

  2. 双路排序:
    id 和 pos2个字段的所有数据到sort buffer.
    然后通过name = 'zhuge' 找主键id,

双路取出来id,然后过滤查找符合条件的.


索引设计原则:

  1. 代码先上,开发的差不多了再完善索引
  2. 联合索引覆盖条件
  3. 最左前缀,离散度大的条件区分
  4. 长索引可以指定列长,比如name 255,此时仅需要前20的索引长度. index(name(20),age,positioin).
上一篇 下一篇

猜你喜欢

热点阅读