具体的题目
答案:
1: 四个字段均使用了该索引
2:c1,c2字段使用了该索引
3:c1字段使用该索引
4:c1字段使用该索引
5:c1,c2字段使用了该索引
个人的收获
索引的最左原则(左前缀原则)
(c1,c2,c3,c4…cN)的联合索引,where 条件按照索引建立的字段顺序来使用(不代表and条件必须按照顺序来写),如果中间某列没有条件,或使用like会导致后面的列不能使用索引。
索引也能用于分组(group by)和排序(order by),分组要先排序,在计算平均值等等。所以在分组和排序中,如果字段顺序可以按照索引的字段顺序,即可利用索引的有序特性。
参考的链接
链接: https://blog.csdn.net/liyang_nash/article/details/104686424.
索引的那些事
聚集索引:主键 非叶子节点是索引 叶子节点是内容
非聚集索引: 普通索引 非叶子节点是自己 叶子节点是主键
前置(缀)索引: 目前理解是截取索引字段部分做索引 要求有适合的长度
一般情况下某个前缀的选择性也是足够高的,足以满足查询性能
MySQL 索引最大 bytes 为 767, 255 * 3 < 767 但是 256 * 3 > 767 所以,varchar(255) 时候,
创建默认索引可以成功,但是 varchar(256) 时,创建默认索引就不成功。
索引 Explain:
1,Extra中的为Using index的情况
where筛选列是索引的前导列 &&查询列被索引覆盖 && where筛选条件是一个基于索引前导列的查询,
意味着通过索引超找就能直接找到符合条件的数据,并且无须回表
2,Extra中的为空的情况
查询列存在未被索引覆盖&&where筛选列是索引的前导列,
意味着通过索引超找并且通过“回表”来找到未被索引覆盖的字段,
3,Extra中的为Using where Using index:
出现Using where Using index意味着是通过索引扫描(或者表扫描)来实现sql语句执行的,
即便是索引前导列的索引范围查找也有一点范围扫描的动作,
不管是非索引前导列引起的,还是非索引列查询引起的。
ICP 直译:索引条件下推
Index Condition Pushdown (ICP)
ICP(set optimizer_switch=‘index_condition_pushdown=off’)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)