关于mysql:InnoDB索引

2次阅读

共计 720 个字符,预计需要花费 2 分钟才能阅读完成。

InnoDB 索引

InnoDB 的索引次要分为两大类一个是汇集索引,一个是一般索引。

汇集索引

InnoDB 汇集索引的的叶子结点存储行记录,因而,InnoDB 必须要有且只有一个汇集索引

  • 如果表定义了主键,则主键就是汇集索引
  • 如果表没有定义主键,则第一个 not null unique 列就是汇集索引
  • 最初,InnoDB 会创立一个暗藏的 row_id 作为汇集索引

一般索引

InnoDB 一般索引的叶子节点 存储主键值。通常状况下须要扫码两遍索引树。

为什么不存储指针而是贮存主键值

当数据须要更新的时候,二级索引不须要批改,只须要批改汇集索引,一个表只能有一个聚簇索引,其余的都是二级索引,这样只须要聚簇索引,不须要重建二级索引

explain 中重要的列

  • id 查问中 select 表的程序
  • type 拜访的类型

    • ALL 全表扫描
    • index 索引扫描
    • range 范畴扫描
    • ref 非惟一索引扫描
    • eq_ref 惟一索引扫描
    • const 常数
  • table 该语句查问的表
  • possible_keys 该查问语句,可能走的索引
  • key 理论应用的索引
  • rows 扫描的行数
  • extra

    • using where 应用 where 筛选
    • using temprorary 应用长期表
    • using filesort 应用文件排序

索引生效

  • like 查问已‘%…’结尾,以’xxx%’结尾会持续应用索引
  • where 语句中应用 <> 和 !=。因为二级索引贮存的是主键值,所以生效。对于主键索引还是会应用的

    • or 操作
    • 索引列存在计算或应用函数
    • 联结索引中没有按程序,或者两头缺失了。
    • 隐式转换

以上状况如果须要查问的列,能够间接索引在索引中失去,那么还是会应用索引的。(笼罩索引)没有应用索引的大部分状况是因为 InnoDB 一般索引的叶子节点 存储主键值,通常状况下须要扫码两遍索引树。

正文完
 0