1

私は他の誰かのコードをクリーンアップしています。非常に複雑な SQL クエリを生成する非常に複雑なシステムを調べていると、IN() WHERE 句が多く使用されていることがわかります。

SELECT * FROM table
 WHERE field1 IN( 1, 2, 3, 4, 5 )
   AND type IN( 1, 2, 3 )

... 等々。field = 1 OR field = 2 OR...次のように一連を組み立てた方がパフォーマンスが向上しますか?

SELECT * FROM table
 WHERE ( field1 = 1 OR field1 = 2 OR field1 = 3 OR field1 = 4 OR field1 = 5 )
   AND ( type = 1 OR type = 2 OR type = 3 )

それとも IN() を使用する方が良いですか? のような単一の値でもtype IN(1)

4

2 に答える 2

3

答えは、MySQL のバージョンによって異なります。開発者は、各メジャー リリースでオプティマイザの改善に取り組んできたので、OR と IN の効率は MySQL 5.6 以降ではまったく異なる可能性があります。また、話している用語の数やインデックスの選択性などにも依存します。

最良のアドバイスは、実際のデータを使用して、インストールされている MySQL バージョンで実際のクエリをベンチマークし、プロファイリングすることです。

于 2014-01-07T23:15:33.957 に答える
0

読みやすさとメンテナンスのために IN を使用することをお勧めします。パフォーマンスは同じですが、良くはありません。実際、サーバーが or..or..or..or ナンセンスのばかげたリストを解析する必要がないため、パフォーマンスが向上する可能性があります。サーバーは SQL を実行するだけでなく、それを解析して意味を理解する必要があることを忘れないでください。私たち人間にとってより読みやすく、サーバーにとってもより読みやすく、したがってより高速に解析されます。

于 2014-01-07T23:07:47.267 に答える