关于mysql:InnoDB索引

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一般索引的叶子节点存储主键值,通常状况下须要扫码两遍索引树。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理