2004-07-14

IS NULL とインデックス

 どこかで「NULLがあるとインデックスが使われなくて遅くなる」という不思議な記述を見かけたけれど、そんなことはないというか、そんな実装をするのはかなりマヌケだと思うのだけれど*1

 少なくともMySQLでは問題ないっすよ?*2

そもそもロックしている時間が長いのが問題なのでは?

 どこかで「MySQLだから~」とか言い訳をしているのを見かけたけれど、そもそもロックしている時間が長くなりうるような設計である限り、他のRDBMSの実装でも同じ問題が起こるんじゃないの? とか思う。

 MyISAM必須でテーブルロックしか使えなくて――というのならまだしも*3InnoDBを使っていて駄目なのなら他のRDBMSでも駄目だと思うんだけどね。

 まあたぶんInnoDBのことを良く知らないで使っているんだと思うので*4この辺とかこの辺とか読んで欲しいですよ。

*1:その場合は大抵「インデックスを張るカラムはNOT NULLである必要がある」ようになっている気がする。

*2:記憶に間違いがなければ、確かMySQLの話題の場所だった気がするので。

*3:まあそれでも、きちんと設計すればロック時間を短くする方法があると思うけど。

*4InnoDBトランザクションを使っているならLOCK TABLESする必要ないし。普通。どうしてもというなら、こっちを使うでしょ。