zoukankan      html  css  js  c++  java
  • 2.MySQL中的索引

      索引就像树的目录,是为了更快的找到所要找的内容(数据)。MySQL中,索引是在存储引擎层实现的,不同的存储引擎有不同的索引模型,如innodb是采用的是B+树的索引模型,本篇主要以innodb存储引擎的索引模型来讲解索引知识。

     1.innodb存储引擎的索引模型

      在innodb中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表,而innodb的索引模型是B+树,所以数据都存储在B+树上。

      每一个索引在innodb里面都对应一颗B+树,根据树的叶子节点的不同,索引分为主键索引(存的是整行数据)和非主键索引(叶子节点为主键),其中主键索引又称为聚簇索引,非主键索引称为二级索引。

      主键的长度越小,普通索引的叶子节点所占的空间就越少,从这个角度来说用自增主键对索引维护的代价要小很多。那在什么业务场景下可以用业务字段做索引呢,如下场景:

       a. 只有一个索引 ;b. 这个索引必须是唯一索引。这样就不用考虑其他索引的叶子节点的大小问题。

     2. 覆盖索引  

    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');

      当执行查询语句 select * from T where k between (3,5);时mysql会先在 k 索引树上查找满足3 到 5 范围内叶子节点(即主键ID 100、500),然后到主键索引树上查找满足条件的行,这个查找过程称为回表。

      如果执行查询语句 select ID from T where k between (3,5);时,则在 k 索引树上即可查到满足条件的ID的值,而避免了回表,这种通过索引查询条件的结果即可“覆盖”查询需求称为覆盖索引,可见覆盖索引也是优化sql的一种很好的手段。

     3.最左前缀原则

      索引的维护也是需要成本的,因为有最左前缀原则,当建立一个联合索引(name,age)时,一般就不用单独建立name索引了。

      

      

  • 相关阅读:
    C语言之数据类型(int float double char unsigned )
    c语言的第一个程序
    socket之udp服务器和客户端
    页面置换算法的模拟实现 C
    C算法--入门篇(1)图形输出
    C算法--入门篇(1)查找元素
    C算法--入门篇(1)入门模拟2
    C算法--入门篇(1)入门模拟1
    C算法--黑盒测试
    C算法--复杂度
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/11016338.html
Copyright © 2011-2022 走看看