次の2つのコマンドの違いは何ですか?WHEREのINとORのSQLの違い
SELECT * FROM table WHERE id IN (id1, id2, ..., idn)
と
SELECT * FROM table WHERE id = id1 OR id = id2 OR ... OR id = idn
どちらが速いのですか? id
が別のタイプの場合、それは異なるでしょうか?
次の2つのコマンドの違いは何ですか?WHEREのINとORのSQLの違い
SELECT * FROM table WHERE id IN (id1, id2, ..., idn)
と
SELECT * FROM table WHERE id = id1 OR id = id2 OR ... OR id = idn
どちらが速いのですか? id
が別のタイプの場合、それは異なるでしょうか?
彼らは意味的に同じです。
IN
は、2番目の例のような等価文の文字列の省略形です。パフォーマンスも同じでなければなりません。
タイプは重要ではありません。常に等価の文字列に評価されます。あなたがNULL
することができNOT IN
とデータを使用している違いがある
、しかし - NULL
はNOT IN
比較のために偽評価しませんので、あなたは、あなたが結果セットに期待していなかった行を取得することがあります。一例として、
:額面でNULL
がどちらも'foo'
または'bar'
であっても上記のクエリが行を返さない
SELECT 'Passed!' WHERE NULL NOT IN ('foo', 'bar')
からNULL
が不明な状態であるため、これは、およびSQLは言うことができません未知の値がではなく、であることが確かにIN
の値の1つです。
私は、サーバーが処理できるより簡単なクエリを提供するため、INは純粋に高速であると思います。 ちょっと考えました。
この記事のフェルナンド・Giovaniniことで、次のコメントを参照してください、彼はINが速く、それをより読みだけでなく、作ることに言及:http://www.ajaxline.com/32-tips-to-speed-up-your-mysql-queries#comment-325677194
'%8:0% 'またはsecmatrix LIKE'%8:0% 'またはsecmatrix LIKE'%4:0% 'またはsecmatrix LIKE'のような' secmatrix 'を使用すると、 %2:0% ''を照会してください。それは少なくとも面白い(またはstuid)のように見える;-) – zerkms
個人的に私はあなたが何の証拠も(特にそれが完全に間違っている)ステートメントで未知の人々を参照することはありませんアドバイスをしたい – zerkms
私は、私が言ったことは真実だと言いましたか?私がしたのは私の考えを伝え、記事を参照することでした。だから、複数の人が答えを出し、誰もが自分の意見や経験を持っているのです。概要を見ると、どちら側が勝っているのかが分かります。 –
これは、特定のDBMSオプティマイザの実装とエンジン自体に依存します。
しかし、それらが意味的に似ており、同様の方法で最適化されていると考えても問題ありません。
最適化は、両方とも同じ実行計画を与える
十分な信頼性を持つすべてのDBMSは、データ構造のためにIN演算子の方がずっと優れています。 さらに、dbがsqlプランを計算するとき、OR演算子が異なる条件を完全に組み合わせる可能性があるため、必ずしもOR形式をIN形式に変換するとは限りません。 論理的な観点からは全く同じです。
私たちがここでどのようなSQL実装を行っているか知っているとよいでしょう。 – JNK