Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
SQLアンチパターン読書会 14章 「アンビギュアスグループ」 2014/02/06 @grimrose
Slide 2
Slide 2 text
目的 グループ内で最大値を持つ行
Slide 3
Slide 3 text
アンチパターン 非グループ化列を参照する
Slide 4
Slide 4 text
単一値の原則 Single-Value Rule
Slide 5
Slide 5 text
アンチパターンの見つけ方 _人人人人人人人人人人_ > エラーメッセージ <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ ※SQLiteとMySQLを除く
Slide 6
Slide 6 text
アンチパターンを用いてもよい場合 MySQLとSQLiteの場合 関係従属性を持つ列のみに クエリを実行するように注意
Slide 7
Slide 7 text
解決策 曖昧でない列を使用する
Slide 8
Slide 8 text
関数従属性のある列のみ クエリから曖昧な列を排除
Slide 9
Slide 9 text
相関サブクエリ ● 読みやすい ● コードの記述も簡単 ● パフォーマンスに注意
Slide 10
Slide 10 text
導出テーブル ● 相関サブクエリよりパフォーマ ンスが高い ● テンポラリテーブル
Slide 11
Slide 11 text
JOIN ● 大量のデータに対するパフォーマンス が重要な場合 ● パフォーマンスの測定してね
Slide 12
Slide 12 text
他の列に対しても集約関数 単一値の原則
Slide 13
Slide 13 text
グループ毎に全ての値を連結 ● GROUP_CONCAT関数 ○ MySQL, SQLite ● PostgreSQLの場合 ○ ARRAY_TO_STRING(ARRAY_AGG(any), ',') ● カスタム関数 ● ストアドプロシージャ
Slide 14
Slide 14 text
まとめ 曖昧なクエリ結果を避けるために、 単一値の原則に従う