by Hayato Matsuura

部分結果


SQLクエリが返す全ての結果は必要はないけれど、その最初の数行だけが欲しいと思ったことがあるでしょう。例えば、 最新の10メッセージを表示したいといった場合です。このような時、ユーザにはそれ以上古いメッセージも見せたい、という場面もよくあります。 その方法として、昔からあるページナビゲーションを使うか、ちょっとモダンな「無限スクロール」のパターンを使うかもしれません。 こういった機能を使うためのSQLクエリは、最新のものを検索するために 全てのメッセージを検索しなくてはならないようだと、 深刻なパフォーマンス問題を引き起こすことがあります。パイプライン化されたorder byは、 そういったクエリを最適化するのには、非常に強力な武器になります。

パイプライン化されたorder byは、 結果をソートするコストを削減するためだけでなく、全ての行を読んでからソートすることなしに、最初の結果を出力できることにも 利点があります。つまり、パイプライン化されたorder byは、 処理を開始するコストが非常に低いのです。これにより、最終結果を出すための処理を無駄にすることなく、最初の数行を取り出した後に処理を中断することが 可能になります。

協力してください

この記事が気に入ったら、私の書いた本「SQLパフォーマンス詳解」や私によるトレーニングもきっと気にいるはず。

この章では、クエリの全結果ではなく部分結果を効率的に取り出すために、パイプライン化されたorder byをどのように使うのかを 明らかにしていきます。そのためのクエリを扱う文法はデータベースによって様々ですが、どのデータベースでも同じような方法で実行されます。 改めて、それらは当たり前の機能であることを示します。

この説明が気に入れば、きっとこの本も 気に入るはず。

目次

  1. 最初のN行のみの 選択 - 最初の数行のみが必要な場合

  2. 次ページの 取得 - オフセットと検索方法の比較

  3. 窓関数 - 分析クエリを使ったページネーション

前へ次へ

You can’t learn everything in one day. Subscribe the newsletter via E-Mail, Twitter or RSS to gradually catch up. Have a look at modern-⁠sql.com as well.

著者について

Markus Winandの写真

Markus Winand氏は、開発者がSQLパフォーマンスを改善するお手伝いをしています。彼は、SQL Performance Explainedの 著者でもあり、出張トレーニングhttp://winand.at/での リモート講義も 行っています。

彼の本

カバー『SQLパフォーマンス詳解』

核心をわかりやすく 解説。

Markusから購入します
(送料無料+PDF)

Amazon.co.jpで購入
(印刷版のみ)

Connect with Markus Winand

Markus Winand on LinkedInMarkus Winand on XINGMarkus Winand on Twitter
“Use The Index, Luke!” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
法律上の通知 | お問い合わせ | 無保証 | 商標 | プライバシーとGDPR | CC-BY-NC-ND 3.0 license