誰にも見えないブログ

雑なメモ。まとまってない文章等

SQLパフォーマンス詳解読書会(7)ノート

インデックスを使ったgroup by

  • group by のアルゴリズム
    • hash
    • sort group
      • 中間結果をマテリアライズしてソートしないのでパイプライン化できる
        • マテリアライズ&ソート:一旦メモリ上で全データをソートする必要があるということ?

部分結果

  • パイプライン化したorder byの使い方

  • 最初のN行のみの選択

  • memo

    • DB2には各種OSS DBをエミュレートする機能がある
  • ページング

    • 複数間結果を10件ずつ区切って一つ一つ選択していく方式
    • ”(1) 順序付けはクエリが呼び出 される度にやり直されるので、新しい売上が挿入されるとページがずれ てしまいます。”(p149)
      • repeatable read だとずれない
    • オフセット法
      • order byした結果をoffset句で飛ばす範囲を指定する
      • limitで必要な行数を指定する
    • シーク法
      • 前ページの最終値”?”を指定し、sort対象の列 < ? をwhere句で与える(Order by DESCの場合)
      • sort 対象の列がユニークである場合にのみ可能
    • window関数
      • ... row_number() over() rn ... where rn between 11 and 20
        • STOP KEYが実行計画に出ていない場合はパイプライン化できない可能性がある
          • OVER句が含まれる内側のクエリがマテリアライズされることがある
  • 行値式:標準SQLだが実装の足並みが揃っていない。DB2PostgreSQLがサポート

    • Oracle範囲条件検索は非サポート(ORA-01796)
    • SQL Server 2017 非サポート
    • MySQL インデックスのアクセス述語として使用不可

SQL Performance Explained

SQL Performance Explained

  • メディア: ペーパーバック