1

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

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

4

1 回答 1

0

尝试使用 MySQL GROUP BY

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

编辑:

这篇 MySQL 文档文章可能对您有用。如何避免表扫描

于 2013-03-12T06:13:08.817 回答