パスワードを忘れた? アカウント作成
507570 journal

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にはいってしまった。
ん~。悩ましい。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

アレゲは一日にしてならず -- アレゲ研究家

読み込み中...