我一直在经历缓慢的查询,并尽我所能来优化每个查询。我遇到了这个问题,我一直坚持下去。

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/

10-11 11:19