比如
select * from table where name="apple" and count=3;
如果仅仅对 name 做单列索引,而没有联合索引,我用 explain 发现没有用到索引
这是怎么回事?
1
b821025551b 2017-09-30 16:30:31 +08:00
灌进去一千万条数据再试一下。
|
2
xinyewdz 2017-09-30 16:33:18 +08:00
mysql 引擎认为全表扫描比使用索引还快,放弃使用索引
|
3
huigeer 2017-09-30 16:34:10 +08:00
灌进去 2 千万再试试吧
|
4
esolve OP @b821025551b 目前 5 百多万数据啊,这还不够啊
|
7
nandaye 2017-09-30 17:41:55 +08:00 via Android
如果数据量大且索引出来的量小,那可能是使用了错误的以前的执行逻辑,执行相同的语句数据库不是每次都会取样估计表的数据量,他会使用上次它判断的最优的执行逻辑。
|
9
cevincheung 2017-09-30 18:13:31 +08:00
@miniyao #5 看 postgresql 的查询计划会更无语的。
|
10
miniyao 2017-09-30 18:20:56 +08:00 via Android
|
11
feiyuanqiu 2017-09-30 18:45:47 +08:00 via Android
想强制使用索引的话,在查询语句里加上 force index
|