我一直在经历缓慢的查询,并尽我所能来优化每个查询。我遇到了这个问题,我一直坚持下去。
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
我已经尝试过(pLevel = 1或pLevel = 2或pLevel = 3或pLevel = 4或pLevel = 5或pLevel = 6)....但是它仍然会进行全表扫描。
最佳答案
尝试使用MySQL GROUP BY。
SELECT pLevel, COUNT(*)
FROM ds_products
GROUP BY pLevel
编辑:
该MySQL文档文章可能对您有用。 How to Avoid Table Scans
关于mysql - 优化给定的mySql查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15353629/