mysql 中的 where 语句有 and 的话,单列索引不起作用?

2017-09-30 16:13:30 +08:00
 esolve

比如

select * from table where name="apple" and count=3;

如果仅仅对 name 做单列索引,而没有联合索引,我用 explain 发现没有用到索引

这是怎么回事?

3724 次点击
所在节点    问与答
11 条回复
b821025551b
2017-09-30 16:30:31 +08:00
灌进去一千万条数据再试一下。
xinyewdz
2017-09-30 16:33:18 +08:00
mysql 引擎认为全表扫描比使用索引还快,放弃使用索引
huigeer
2017-09-30 16:34:10 +08:00
灌进去 2 千万再试试吧
esolve
2017-09-30 16:38:30 +08:00
@b821025551b 目前 5 百多万数据啊,这还不够啊
miniyao
2017-09-30 17:06:22 +08:00
@xinyewdz 你这是开玩笑?还是 mysql 真有这么根据查询速度,取舍索引的做法?
huigeer
2017-09-30 17:12:07 +08:00
@miniyao mysql 确实会这样的, 它是根据扫描的数据量。
nandaye
2017-09-30 17:41:55 +08:00
如果数据量大且索引出来的量小,那可能是使用了错误的以前的执行逻辑,执行相同的语句数据库不是每次都会取样估计表的数据量,他会使用上次它判断的最优的执行逻辑。
akira
2017-09-30 18:06:55 +08:00
@miniyao 对的。
如果觉得 mysql 没有正确使用索引,那么可以在 sql 里面指定使用什么索引
cevincheung
2017-09-30 18:13:31 +08:00
@miniyao #5 看 postgresql 的查询计划会更无语的。
miniyao
2017-09-30 18:20:56 +08:00
@huigeer
@akira
@cevincheung

嗯,谢谢,有空去测试观察下😜
feiyuanqiu
2017-09-30 18:45:47 +08:00
想强制使用索引的话,在查询语句里加上 force index

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

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

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

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

© 2021 V2EX