タグ

ブックマーク / yu-dotnet2004.hatenadiary.org (1)

  • SQLのNOT INはなぜ遅い? - C.O.D -Coding or Die-

    このあいだ聞かれたときにすぐに答えられなかったから書いとく。あとから考えたら当たり前のことだったんだけどね。 結論から言えば、全レコードをシーケンシャルアクセスしなければならないから遅い。 以下、それについて具体的な話を展開するけど、最初に断っておくと私はSQLRDBMSも詳しくないので間違ったことを書いているかもしれない。もし、致命的な間違いなどに気づいた方はコメントしてくれると助かる。 NOT INについて考える NOT INが遅いのは、RDBMSの内部動作を考えれば当たり前で。 SELECT * FROM Employee WHERE id NOT IN(2, 3); というSQLは、Employeeテーブルからidが2でも3でもでないレコードを取得しようとしているが、これを達成するためには最初から最後のレコードまでアクセスしてノットイコールの比較を行わないと抽出できない。例外なく

    SQLのNOT INはなぜ遅い? - C.O.D -Coding or Die-
  • 1