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 に答える