IN句に30000件

訳あってKvasir/Soraのパフォーマンステストをしてみているのだが、10万件のドキュメントを登録して検索するとかなり重かった。(ちなみに一応言わせてもらうと、普通の使い方をしている分にはKvasirは重くはないです。検索条件がかなり特殊なケースで検証しています。)

行なった検索は結果として約3万件のドキュメントがヒットするような検索なのだが、ボトルネック調査の結果、次のようなSQLに処理がかかっていることが分かった。

SELECT * FROM page WHERE id IN (1, 2, ....(略), 30000)

まぁ仕方ない処理とはいえ、こりゃ遅いはずだ。

それでふと思ったのが、「SQLが長すぎることが重い一因かも」ということ。そこで試しに一度にIN句に100個ずつ指定するようにして、このSQLを300回に分けて発行してみた。ちなみにデータベースはH2の組み込みモード。

結果は、「分けないほうが若干早い」。

純粋にSQLの処理時間だけを比べたわけではないのでざっくりであるし条件によっても結果は代わるかもしれないが、まぁ参考までに。