1. ホーム
  2. sql

[解決済み] WHERE x IN (5) vs WHERE x = 5 ...なぜINを使うのか?

2022-01-26 14:47:36

質問

最近、INを不適切に使っている人がいるような気がします。もしかして、スピードが上がるとか、何かコツがあるのでしょうか?

このクエリ

SELECT * FROM pages WHERE is_visible IN ($visibility)

なぜそれを使うのか?なぜダメなんだ

SELECT * FROM pages WHERE is_visible = $visibility

もちろん、これだったらね。

SELECT * FROM pages WHERE is_visible 
IN ($visibility,$invisibility,$somethingelse)

次に WHERE x IN (1,2,3) は、より良い代替案として WHERE x = 1 OR x = 2 OR x = 3 ということですよね?でも確かにこれは だけ を使うべきシナリオなのでしょうか?

とにかくお時間をいただきありがとうございました!お返事お待ちしております。

解決方法は?

ここでは、パフォーマンスを上げるためのトリックはありませんが、パフォーマンスが低下することもないと思います。 ですから、どちらの方法でもOKです。 パラメータが1つしかないIN句を使うとおかしく見えるというのは同意しますが、それでも十分簡単です。

おそらく開発者が、将来的に複数の値が許される可能性が高い(こうすればクエリが変更されない)と考えているから起きるのだと思います。 あるいは、開発者が複数の値が可能なシナリオに慣れていて、習慣的にそのように書いているだけかもしれません。