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

まとめ 曖昧なクエリ結果を避けるために、 単一値の原則に従う