我一直在检查我的慢查询,并尽我所能对每个查询进行属性优化。我遇到了这个,这是我一直坚持的。
EXPLAIN SELECT pID FROM ds_products WHERE pLevel >0
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE ds_products ALL pLevel NULL NULL NULL 45939 Using where我已经为pLevel [tinyint(1)]建立了索引,但是查询没有使用它,并且没有执行全表扫描。
下面是该表中每个pLevel值的行数:
pLevel count
0 34040
1 3078
2 7143
3 865
4 478
5 279
6 56如果我查询pLevel的特定值,它会使用索引:
EXPLAIN SELECT pID FROM ds_products WHERE pLevel =6
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE ds_products ref pLevel pLevel 1 const 1265我试过pLevel>=1和pLevel<=6..。但它仍然会进行全面扫描
我已经尝试过(pLevel=1、pLevel=2、pLevel=3、pLevel=4、pLevel=5或pLevel=6) ....但它仍然会执行全表扫描。
发布于 2013-03-12 14:13:09
尝试使用MySQL GROUP BY。
SELECT pLevel, COUNT(*)
FROM ds_products
GROUP BY pLevel编辑:
这篇MySQL文档文章可能会对您有所帮助。How to Avoid Table Scans
https://stackoverflow.com/questions/15353629
复制相似问题