优化给定的mySql查询

时间:2013-03-12 04:58:00

标签: mysql

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

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)....但它仍会进行全表扫描。

1 个答案:

答案 0 :(得分:0)

尝试使用MySQL GROUP BY

SELECT pLevel, COUNT(*)
FROM ds_products
GROUP BY pLevel

修改

这篇MySQL文档文章可能对您有用。 How to Avoid Table Scans