• 关于索引覆盖的一些个人理解


    索引覆盖其实就是在索引树上就可以满足查找时的需求而无需后续操作例如:二级索引中的回表操作,我们在将这样一种检索时发生的操作称为索引覆盖,索引覆盖对所有索引树都适用。

    索引覆盖的例子:

    例如我们现在有一个表table1它的某列为:id

    1.select * from table1 where id = 1

    2.select id from table1 where id = 1

    上述的两条sql语句很相近但是因为检索字段的不同会导致1中的sql语句无法使用到索引覆盖的操作。这点在explain中extra中有很好的体现例如2中的sql语句在explain中extra列中会显示using index这样就是使用到了索引覆盖。之所以2会用到索引覆盖是因为在索引树中搜索的时候在叶子节点中就可以找到相应的数据而无需其它操作例如联合索引的回表操作,所以这样效率更高。

    联合索引的有点有哪些有点?

    1.无需回表操作,减少二次查找时的随机IO的开销

    2.减少遍历数据页的数量,因为索引树中叶子节点占用的数据页的数量肯定是要比原表的数量少的或者说是二级索引的索引树的叶子结点的数量小于聚簇索引的索引树。

  • 相关阅读:
    Linux内核等待队列机制介绍
    对数学的思考
    Linux 进程状态
    linux内核链表
    linux内核的经典书籍
    似乎最近发的Blog又少了
    抽象——放弃细节的另外一个说法
    成长
    发现QQ的一个小问题
    放上了一篇几个月前写的东西
  • 原文地址:https://www.cnblogs.com/hxjz/p/12608318.html
Copyright © 2020-2023  润新知