• 聚集索引和非聚集索引


    聚集索引和非聚集索引概念

    ​ 什么是聚集索引?

    ​ 众所周知,innodb中索引的组织形式是B+树,非叶子节点存key,叶子节点存key+data,叶子节点之间用指针联通。

    ​ 聚集索引则在data存放是数据页

    ​ 什么是非聚集索引?

    ​ 非聚集索引和聚集索引一样, 同样是采用平衡树作为索引的数据结构。索引树结构中各节点的值来自于表中的索引字段, 假如给user表的name字段加上索引 , 那么索引就是由name字段中的值构成。data中存放的是主键的值,得到主键后还需要在聚集索引上再查询一次

    索引和表的关系

    ​ innodb存储引擎表是索引组织表,这代表着表数据是按主键顺序存放。而每张表都有个主键(没设主键会隐藏生成一个),主键即为聚集索引。那么换句话说,表中数据存储实际上采用的是B+树存储。

    主键和聚集索引的关系

    ​ 如果设置主键那么主键为聚集索引

    ​ 如果没有设置,第一个非空的唯一索引则为聚集索引

    ​ 如果再没有,自动隐藏创建个主键当做聚集索引

    非聚集索引

    ​ 除了聚集索引剩下都是非聚集,聚集索引一张表只有一个,非聚集有很多。

    ​ 非数据索引也是一颗数,在查询的时候先通过非聚集索引数找到主键id,在通过主键id在聚集索引树上找到对应数据

    联合索引

    ​ 创建个索引(A,B,C)其实会创建三个索引,A,AB,ABC,很多资料上说最左前缀法则就能使用上索引

    ​ 如果where C B A则不能,其实不然,mysql当做有个优化器,可以调整条件顺序,只要有开头就能使用上索引,即这个场景下只要有A就能使用索引。

    ​ 如果中间断了 即(C,A)也是可以使用索引,不过有个extra查询消耗

    ​ 不信可自行explain

    覆盖索引

    ​ 因为非聚集索引需要查询两次,但是有种情况是只需要一次的,那就是索引即是返回数据

    ​ 如果定义非聚集索引(A,B)

    ​ 查询的时候select B from tabel where A = 1;

    ​ 那么在B+树中的叶子节点中的key已经存放了A,B的数据,那么这样是可以直接返回的,无需找去查询聚集索引树。

  • 相关阅读:
    总结:Sharepoint2010 Client Object Model Managed Client
    学习:SharePoint验证控件
    学习:Javascript与后台交互(转)
    总结:sharepoint webservice开发常见错误
    Xtreme ToolkitPro 版本更新至 2007 Volume 1
    WebUI Studio.NET® 优秀用户界面控件套装
    Spread v7.0 表格控件中的领头羊
    WebUI Studio.NET® 2007 R1 用户界面套装新版本发布,全面支持AJAX技术
    Skelta SharePoint Accelerator
    磐岩科技控件中国网乔迁新址
  • 原文地址:https://www.cnblogs.com/bushishucai/p/11289558.html
Copyright © 2020-2023  润新知