適当に切り上げて現場に向かい、本番の環境で動かしながら各部の処理時間を計測するにつれ、検索部分がとんでもなく遅いことが判明した。暗澹たる気持ちに襲われてきたが、今日は、睡眠のおかげか頭が冴えていた。昨日までぜんぜん気づかなかったボトルネックを次々と発見、二時間くらいかけてさらに最適化を重ねた結果、10分経っても終わらなかったり半ばデッドロックしていた処理が、なんと数秒で終わるようになってしまった。今まで何アホやってたんだ。。
ある文法のエッラい複雑な検索式を解析(Raccを使いますた)、変換&最適化してSQLに落とす処理の中、サブクエリーがネストされていってとんでもないことになっていたのだが、一時テーブルを使ったりしてうまく解きほぐす方法を考え、劇的に改善した。
やっぱりPostgreSQLはいいよ。7.4ではcolumn IN (SELECT …)が異様に遅いのが改善された(FAQ参照)し、ALTER TABLEなんかも制約が減って速くなってきているし、不満はほとんど解消されつつある。