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时的消耗,但是能加快查询,如果做读写分离,主库不建立索引,从库建立索引,带来的风险是主从同步的时候延迟会更加大,
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章