2017-12-18 14 views
0

単一の値の列のペアを検索しようとしているMySQLテーブルがあります。非常に大きなテーブルなので、検索時間をできるだけ短くしたい。私は元にEXPLAIN名とsirname複数の列で単一の値を使用するWHEREの最適化

に理解インデックスと

SELECT * FROM clients WHERE name=? OR sirname=? 

VS

SELECT * FROM clients WHERE ? IN (name, sirname) 

を容易にするために、以下の表を簡素化している

は、インデックスを使用しますが、ではありませんの後者

これは正確であるか、いくつかの最適化がありますかEXPLAINが捕まえないフードの下で行っていますか?

Checking multiple columns for one valueと強く関連していますが、スレッドの時代のためにそこで議論することはできません。

答えて

0

MySQLは、一般的に、クエリでテーブル参照ごとに一つのインデックスを使用しているので、あなたはおそらく、このようにそれを行う必要があります。

SELECT * FROM clients WHERE name=? 
UNION 
SELECT * FROM clients WHERE sirname=? 

これは、インデックス選択の目的のための2つのテーブル参照としてカウントされます。それぞれの場合に適切なインデックスが使用されます。

+0

最初のクエリはインデックスを使用しますが、MySQLは複数のインデックスをうまく処理します。 – KilleR

+1

@KilleR - 'EXPLAIN'を確認してください。 "インデックスマージ"は有用なインデックスの欠如を回避するための_kludgeです。 Billのソリューションは、2つの別々のインデックスをはるかに効率的に使用できます。 –

関連する問題