mysql 覆盖索引
覆盖索引:只有索引包含了where条件部分和select返回部分的所有字段,才能实现这个目的(只要查询的条件和返回字段中的 所有字段都能被一个非主键索引覆盖,就能用覆盖索引)
- 如果查询条件使用的是普通索引(或是联合索引的最左原则字段),查询结果是联合索引的字段或是主键,不用回表操作,直接返回结果,减少IO磁盘读写读取正行数据
- 通常情况下建议使用第二种
- 1.select from T where k in(1,2,3,4);
2.select from T where k between 1 and 4; - why?
- 第一个要搜索5次,第二个搜索1次
- 数据量很大的时候,二级索引比主键索引更快”,这个结论是只有在使用覆盖索引时才成立,因为不需要回表
- 如果查询顺序和联合索引的顺序不一致,优化器会自动做优化
- MySQL5.6引入的索引下推优化,可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。
- 建立索引会增加insert和update时的消耗,但是能加快查询,如果做读写分离,主库不建立索引,从库建立索引,带来的风险是主从同步的时候延迟会更加大,
还没有评论,来说两句吧...