我一直在经历我的慢查询,并尽我所能优化每一个。我碰到了这个,我一直坚持下去。
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)....但它仍会进行全表扫描。
答案 0 :(得分:0)
尝试使用MySQL GROUP BY。
SELECT pLevel, COUNT(*)
FROM ds_products
GROUP BY pLevel
修改强>
这篇MySQL文档文章可能对您有用。 How to Avoid Table Scans