SQLアンチパターン本購入。SQLSQLアンチパターン本購入。※アプリ内で整合性を取ろうとする、アプリ以外からゴミデータが入る場合がある)⇒外部キー制約を宣言するとりあえず削除フラグ⇒状態を持たせるNEWや、有効、中止、キャンセル、廃止予定など⇒全てのテーブルに削除フラグはおかしい。⇒削除は設計不足を示すお客様は本当に削除と言っているのか。⇒交差テーブルマルチカラムアトリビュート⇒複数の列ではなく、複数の行に。※年が変わる度にテーブルや列を追加している。欠番を埋めてしまう)⇒欠番は埋めない。時代はBIGINThttp://hamamuratakuo.blog61.fc2.com/blog-entry-648.html設計時にintとbigintで悩むよねhttp://snowland.net/nucleus/item/3014MENTORの原則Measure(測定)EXPLAIN(解析)Nominate(指名)Test(テスト)Optimize(最適化)Rebuild(再構築)クエリスパゲッティクエリ・・・1ステップで解決しようとする。⇒UNION等を使い、分割してワンステップずつ解く。※*で不必要な列まで取得する。定義変更によりバグの元になる。⇒SELECTはきちんと列を明示的に指定する。P22正規化とか考えずに必要なものを全部テーブルに詰め込んで見る正規化手順に沿って5NFまで持っていくもちろん慣れていれば3NFくらいからいきなり書き始められる。NULL制約をつける・テストケースが膨大に増える。・演算になれていないと分析に時間がかかる。P89MySQLを使うなら遅くなるから正規化してはいけない?なぜRDBMSを扱う上で正しい正規化でレスポンスが悪くなるの?確かにMySQL5.5以前は遅くなるケースもあるプライマリーキーを使った結合なら大概ちゃんとした速度で動く。NLJなので数百万件に達すると遅くなる。sort_buffer_sizehttp://nippondanji.blogspot.jp/2009/03/using-filesort.htmlFilesortとはクイックソートのことである。BYが指定されているとき、ソートが行われるタイミングは3種類ある。filesortがEXPLAINに出ていないときはインデックスを用いてソートが行われている。filesortだけがEXPLAINの最初の行に出ている時は、先にソートしてからJOINが実行されている。filesortがEXPLAINの最初の行に出ている時は、先にJOINしてからソートされている。BYにおけるソート条件は、一つのテーブルに集中させる。JOINにおいてソート処理する場合には、LIMIT句が適用されるのはJOINとソートが完了した後である。JOINの場合には、LIMIT句の問題はサブクエリである程度対策が可能である。http://nippondanji.blogspot.jp/2009/03/using-filesort.html⇒インデックスが使われるようにチューニングする。絶対に読み切らならなければいけない本が6冊溜まってしまっている。コメントをキャンセルメールアドレスが公開されることはありません。*メール*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。date*日本語が含まれない投稿は無視されますのでご注意ください。