by Hayato Matsuura.

部分結果


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

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

協力してください

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

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

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

目次

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

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

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

前へ次へ

著者について

Markus Winandの写真

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

彼の本

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

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

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

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

Do not use offset for pagination

Learn why

Visit my sibling!A lot changed since SQL-92!

Use The Index, Luke のカップは

ステッカー、コースター、本、コーヒーマグ。 学習に必要なものすべて。

今すぐ購入

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