人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLのINDEXに関する質問です。アドバイスお願いいたします。
以下のテストを実施したところ、Query2ではINDEXが使われない状況となってしまいました。
MySQL4,5ともに同じ状況です。

▼検証対象テーブル
CREATETABLEIFNOTEXISTSitems(
idBIGINT(20)UNSIGNEDNOTNULLauto_increment,
prefecture_idINT(11)UNSIGNEDdefaultNULL,
item_type_idINT(11)UNSIGNEDdefaultNULL,
item_category_idINT(11)UNSIGNEDdefaultNULL,
data_idsLONGBLOBdefaultNULL,
PRIMARYKEY(id)
)ENGINE=MyISAM;

▼作成したINDEX
ALTER TABLE items ADD INDEX index_all_keys (prefecture_id,item_type_id,item_category_id);

▼検証を行ったクエリー
>Query1:全てのキーを条件指定→INDEXを利用
mysql>EXPLAIN SELECT id,data_ids FROM items WHERE prefecture_id IN (10,11,12,15,16,17,19,24,31)ANDitem_type_id=(1)ANDitem_category_idISNULL;

|1|SIMPLE|ITEM|range|index_all_keys|index_all_keys|20|NULL|11|Usingwhere|

>Query2:全てのキーを条件指定ただし、IN演算子で全て複数→INDEXを利用しない!なぜ?
mysql>EXPLAIN SELECT id,data_ids FROM items WHERE prefecture_id IN(1,2,3,4,5,6,7,10,15,20,26,41,46)ANDitem_type_idIN(1,5,6,8,9,10,11)ANDitem_category_idIN(1,2,3,4,5,9,10);

|1|SIMPLE|ITEM|ALL|index_all_keys|NULL|NULL|NULL|13311|Usingwhere|

●質問者: ion10
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:24 ADD ALL ALTER ENGINE
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● chuken_kenkou
●100ポイント ベストアンサー

MySQL4,5ともに同じ状況

MySQLは4.0と4.1では、かなりの機能追加、一部の仕様変更があります。

また、MySQL 5.0と5.1でも、4.0と4.1程ではないにしても、違いがあります。

バージョンは、明記するようにしてください。


2番目のクエリは、絞込みができない(13311件が対象)ため、MySQL側がテーブルスキャンした方が早いと判断されたのだと思います。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 6.2.1 EXPLAINを使用して、クエリを最適化する

◎質問者からの返答

ご回答ありがとうございます。

そして、バージョンの件、失礼しました。

手前の環境は以下のとおりです。

MySQL4 => 4.0.27

MySQL5 => 5.0.67

また、教えて頂いたリファレンスは既知でしたが、改めて読み込んでみました。

どうやら私のケースではINDEXが効かない気もしてきました。

詳しくは、コメントに改めて記載いたしますので、よろしければまたアドバイスお願いいたします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ