请问 Mysql 在查询不等于的操作时如何走索引

2018-01-23 10:47:00 +08:00
 K1W1
单表查询,尝试使用 a != xx 或者 a not in (xx) 或者 a <> xx 或者 a > xx or a < xx,看执行计划都不走索引。请问各位大牛 mysql 有没有比较好的执行不等于的操作的方法
16187 次点击
所在节点    MySQL
7 条回复
realpg
2018-01-23 11:57:25 +08:00
数字的话,用< union >
realpg
2018-01-23 11:58:11 +08:00
感觉好像歧义了,不是什么特殊括号,是用小于 union 大于
purejs
2018-01-23 12:48:01 +08:00
一般是建立 联合索引比如 index(a, b) 然后查询的时候 where a = key1 and b > ... 。这个时候 b 的不等于操作是基于 a 字段索引下的扫描。B+树的构造决定了索引怎么走。另外,现在只需要写 SQL 就可以直出 web 了:enhancer.io
K1W1
2018-01-23 12:55:23 +08:00
@realpg #2 谢谢回复,我试了,但是遇到一个奇怪的问题,> 走了索引 ,< 没有走索引
K1W1
2018-01-23 12:59:28 +08:00
@purejs #3 可以如果我只需要这一个条件呢?不太明白 a 字段的作用
purejs
2018-01-23 14:31:18 +08:00
@K1W1 只有一个字段的话,数据库优化器会判断候选结果集是否超出了全部结果的 5%(估计),如果超过,那么就全表扫描。所以像> < in 这种操作,走不走索引要看本身可能的结果数量。
K1W1
2018-01-23 14:37:22 +08:00
@purejs #6 谢谢,涨知识了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425142

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX