SQLクエリが返す全ての結果は必要はないけれど、その最初の数行だけが欲しいと思ったことがあるでしょう。例えば、
最新の10メッセージを表示したいといった場合です。このような時、ユーザにはそれ以上古いメッセージも見せたい、という場面もよくあります。
その方法として、昔からあるページナビゲーションを使うか、ちょっとモダンな「無限スクロール」のパターンを使うかもしれません。
こういった機能を使うためのSQLクエリは、最新のものを検索するために
全てのメッセージを検索しなくてはならないようだと、
深刻なパフォーマンス問題を引き起こすことがあります。パイプライン化されたorder by
は、
そういったクエリを最適化するのには、非常に強力な武器になります。
パイプライン化されたorder by
は、
結果をソートするコストを削減するためだけでなく、全ての行を読んでからソートすることなしに、最初の結果を出力できることにも
利点があります。つまり、パイプライン化されたorder by
は、
処理を開始するコストが非常に低いのです。これにより、最終結果を出すための処理を無駄にすることなく、最初の数行を取り出した後に処理を中断することが
可能になります。
協力してください
この記事が気に入ったら、私の書いた本「SQLパフォーマンス詳解」や私によるトレーニングもきっと気にいるはず。
この章では、クエリの全結果ではなく部分結果を効率的に取り出すために、パイプライン化されたorder by
をどのように使うのかを
明らかにしていきます。そのためのクエリを扱う文法はデータベースによって様々ですが、どのデータベースでも同じような方法で実行されます。
改めて、それらは当たり前の機能であることを示します。
この説明が気に入れば、きっとこの本も 気に入るはず。