2016-05-11 11 views
0

私は約700万レコードの大きなテーブルを持っています。 (MySQL)インデックスを使用しているMySQL

カラムは次のようになります。私はそれがATYPEインデックスを使用しています

select * from tablename where `atype`='doit' 

を実行したときに

id | atype | textbody | .... 

IDは、ATYPEはインデックス

主キーです。 (170万個のdoIt行がテーブルにある)

が、私はこのクエリ

select * from tablename where `atype`='doit' or `atype`='payment' 

を実行したときには、インデックスを使用しません。私はpossible_indexがatypeだと言うだけです。 (テーブルには168行の支払い行があります)

この動作の説明はありますか?

このクエリを実行すると、

select * from tablename where `atype`='paymentfailed' or `atype`='payment' 

atypeインデックスを使用します。私は「のdoIt」を使用するとき

ので、それはMySQLがインデックスについてかなり凝り性ですATYPEインデックス

+0

する指標でありますか? –

+0

select * from tablename 'atype' = 'doit' - > 170万レコード select * from tablename' atype' = 'payment' - > 168レコード select * from tablename - > 7百万レコード –

答えて

0

を使用していません。私はそれがINいうよりORについて賢くだと思う:

select * 
from tablename 
where `atype` in ('doit', 'payment'); 

問題が解決しない場合は、union all使用:あなたが170万件のレコードをつかむしようとした場合にどのような利用

select * 
from tablename 
where `atype` = 'doit' 
union all 
select * 
from tablename 
where `atype` = 'payment'; 
+0

私も試しました、まだpossible_keys atypeしかしキーnull –

+0

とはい私は組合も、ユニオンは、インデックスを使用してみましたが、私はそれが他のクエリのインデックスを使用しない理由を知りたいのですか? –

+0

質問を更新してもう少し詳細を追加しました –

関連する問題