2008年12月28日

MySQL はカラム値が NULL のインデックスを作成しない?

MySQL のパフォーマンス問題に遭遇。

テーブルにカラム値が NULL であるレコードが大量に(=50万件)
登録されていたとする。NULL でないレコードも50万件くらいある。
カラムに対して create index でインデックスを張っておく。次の SQL 文を実行してみると、非常に遅い。

select * from TABLE where COLM is null

次の SQL 文は速い。

select * from TABLE where COLM is not null
select * from TABLE where COLM>100

MySQL は NULL 値が大量にあると is null 関数に対して
インデックスをあまり使わなくなるのだろうか?
posted by みのしす at 19:26| Comment(2) | TrackBack(0) | 日記
この記事へのコメント
ハッシュが衝突しているようなキーを引っ掛けてしまうと limit 1 と書いて「ともかく1つ出せ」と言ってもなかなか返さなくなる。
単純な B-trees というわけではないらしい。
困ったなあ。自分で作るしかないかなあ。
Posted by みのしす at 2009年01月02日 03:13
値が NULL になるレコードを集めてテーブルを新設することで解決しました。
Posted by みのしす at 2009年01月08日 12:58
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/24874718

この記事へのトラックバック