orって遅いんだ…

データベースのクエリの話。高速化のために、フルテキストサーチ(要するにインデックス、要するに辞書だわ)を入れてみたのだが、速くならない。遅い箇所は分かっているのだが、そのクエリが走ると遅い。走らないと、まあ速い。で、かなり長いこと調べて(ググって)こいつが臭い、というところまで行き着いた。フルテキストサーチとフレーズ検索の組み合わせが遅いとのこと。が、その部分を某ページに従って直してみたところ、逆に更に遅くなってしまった。何だよ、違うじゃん。万策尽きたか?
そんなはずはない、と更に調べることしばし。orが遅い、というページを見つけた。これかも?で、クエリのorで連結している条件をばらして、別々のクエリとし、それをUNIONでくっつけるとよい、とのこと。要するに「select * from TABLE where A or B」を「select * from (select * from TABLE where A) UNION (select * from TABLE where B)」にするとよいらしい。で、早速実験してみる。お、速えぇ。これだよ、これ。この速さが出ないとおかしいよね。何でも、or条件のAとかBに同じインデックス要素が入っているとインデックスが効かなくなってしまって遅くなるのだとか。しかし、SQLって言ったって一応言語なんだからさぁ、この程度の最適化くらいSQLのパーサーでやれば?ORACLEとかなら、きっと当たり前のようにやっているんだろうなぁ…。MySQLだからかな?