10 分钟让你明白 MySQL 是如何利用索引的 (查看原文)

一、前言在MySQL中进行SQL优化的时候,经常会在一些情况下,对MySQL能否利用索引有一些迷惑。譬如:MySQL 在遇到范围查询条件的时候就停止匹配了,那么到底是哪些范围条件?...

fordba.com  by Harvey  
评论 (9)
Thumb

TWO_STRINGS 2017-08-10 18:15

那比如a,b上建了索引,查询a=1 and c
Thumb

TWO_STRINGS 2017-08-10 18:32

Index filter 那不太理解,是条件中如果某索引列是范围查询,那该列可以索引查,而它后面的列是不是索引查取决于该列的上下边界是不是确定的,如果确定那后面的列就加入索引列,不确定就加入filter ,是这个意思么?请楼主赐教哈哈
Thumb

u356892 2017-08-12 13:07

楼主讲的不是很清楚,最好能讲一下查阅时怎么用索引,如果查阅条件中有的条件不是索引,怎样查询会提高速度
Thumb

Along007 2017-08-12 16:10

我怎么觉得不够深入啊……
Thumb

系统推荐好友 2017-08-13 13:35

“这里为什么index filter 只是c1呢?因为c2 是用来确定上边界的,但是上边界的c1没有出现(=,c2没有出现,因此index key 只有c1字段。c2,c3 都出现在索引中,被当做index filter.” 恕我愚钝 没看明白
Thumb

系统推荐好友 2017-08-13 13:40

Index Filter 那一段 的例子 mysql应该会自己优化直接使用c3的索引吗?
Thumb

u391878 2017-08-13 22:05

回答系统推荐好友: 原文有个地方笔误,已经修正: 这里为什么index key 只是c1呢?因为c2 是用来确定上边界的,但是上边界的c1没有出现(=,c2没有出现,因此index key 只有c1字段。c2,c3 都出现在索引中,被当做index filter.
Thumb

u391878 2017-08-13 22:09

回答 TWO STRINGS: filter 其实是无法利用索引的部分,但是该查询又在 索引条件中,譬如 存在索引 idx_c1_c2_c3(c1,c2,c3),如果查询是where c1=1 and c3=3 ,这里可以用到索引的部分为c1,c3 字段在组合索引里面,但是因为c2没出现在查询里面,无法利用到索引,所以被加入index filter,但是在MySQL 5.6 里面有个ICP,filter的部分可以采用ICP。
Thumb

爱上麻辣的香锅 2017-11-07 08:39

idex_c1_c2_c3 where c1>=1 and c2
用微信扫描
小程序码阅读原文

开发者头条

程序员分享平台