zoukankan      html  css  js  c++  java
  • 索引下(5)

    在下列表T中,执行select * from T where k betwee 3 and 5;,需要执行几次树的搜索操作?

    mysql> create table T (
    ID int primary key,
    k int NOT NULL DEFAULT 0, 
    s varchar(16) NOT NULL DEFAULT '',
    index k(k))
    engine=InnoDB;
    
    insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');
    

    image

    SQL语句执行流程:

    1. 在k索引树上找到k值为3的记录,取得ID为300
    2. 再到ID索引树上找到ID为300对应的R3记录
    3. 在k索引树上找到k值为5的记录,取得ID为500
    4. 再回到ID索引树上找到ID为500对应的R4记录
    5. 在k索引树上找到k值为6的记录,不符合条件,结束循环

    在这个过程中,回到主键索引搜索树的过程,成为回表。

    在这个例子中,由于查询结果所需要的数据只有主键索引上有,所以不得不回表。如果执行的语句是select ID from T where k between 3 and 5;,只需要查询ID的值,而k索引树上有这个值,不需要回表,索引k已经覆盖了查询所需要的值,成为覆盖索引

    覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

    联合索引:将多个字段设置为索引,在B+树上符合最左前缀原则。

  • 相关阅读:
    跨数据库查询——dblink
    进度条
    datagrid 的标题的内容不对应整齐
    ie9table排列不对.td错行,多了一列
    进位方法
    ie9 jscript7 内存不足 页面无响应
    a标签 href触发及传值
    uploadify上传附件 点击保存无效 切F12就可以正常保存
    oracle增加用户密码,cmd导入数据库
    ${}中嵌套${}
  • 原文地址:https://www.cnblogs.com/jackw1/p/12597148.html
Copyright © 2011-2022 走看看