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