quabbinの日記: ちょっとした実験の結果
日記 by
quabbin
ふと、昔挑戦しかけていたネタに再挑戦してみることにした。
まずPostgreSQL7.4において、20万行のデータがあるテーブル[TBL]を用意。
カラムFOOにインデックスを張った状態で、なんの変哲も無い普通のクエリ
SELECT * FROM TBL WHERE FOO = 'bar';
と
SELECT * FROM TBL WHERE (FOO = 'bar') IS NOT FALSE;
を実行。すると、前者はindexを使うのだけど、後者はSeq Scanに入ってしまう。
後者が挑戦したかったネタ。IS NOT FALSEを使う利点は、Backyard PreparedStatementAndNullにあるとおりで、PreparedStatementでパラメータ数が可変の場合も元SQLをconst値の文字列を利用することが可能になるというところ。使ってみたいのだが…
# FOOカラムがNOT NULLでないと期待したとおりには動きません。
で、ついでにもう一つ。これが高速じゃないと意味がないということで、
SELECT * FROM TBL WHERE FOO = null;
を試してみるが…こちらもマズいことに、Seq Scanにはいってしまった。
ん~。悩ましい。
ちょっとした実験の結果 More ログイン