Ambiguous Groups #sqlap

Afef2fcf56cef5e90af94a1640d95fbc?s=47 grimrose
February 05, 2014

Ambiguous Groups #sqlap

SQLアンチパターン読書会 「アンビギュアスグループ」

Afef2fcf56cef5e90af94a1640d95fbc?s=128

grimrose

February 05, 2014
Tweet

Transcript

  1. SQLアンチパターン読書会 14章 「アンビギュアスグループ」 2014/02/06 @grimrose

  2. 目的 グループ内で最大値を持つ行

  3. アンチパターン 非グループ化列を参照する

  4. 単一値の原則 Single-Value Rule

  5. アンチパターンの見つけ方 _人人人人人人人人人人_ > エラーメッセージ <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ ※SQLiteとMySQLを除く

  6. アンチパターンを用いてもよい場合 MySQLとSQLiteの場合 関係従属性を持つ列のみに クエリを実行するように注意

  7. 解決策 曖昧でない列を使用する

  8. 関数従属性のある列のみ クエリから曖昧な列を排除

  9. 相関サブクエリ • 読みやすい • コードの記述も簡単 • パフォーマンスに注意

  10. 導出テーブル • 相関サブクエリよりパフォーマ ンスが高い • テンポラリテーブル

  11. JOIN • 大量のデータに対するパフォーマンス が重要な場合 • パフォーマンスの測定してね

  12. 他の列に対しても集約関数 単一値の原則

  13. グループ毎に全ての値を連結 • GROUP_CONCAT関数 ◦ MySQL, SQLite • PostgreSQLの場合 ◦ ARRAY_TO_STRING(ARRAY_AGG(any),

    ',') • カスタム関数 • ストアドプロシージャ
  14. まとめ 曖昧なクエリ結果を避けるために、 単一値の原則に従う