まず、基本的な規範
- あなたはInnoDBストレージエンジンのテーブルを使用する必要があります。
- 表のデフォルト・キャラクタ・セットUTF8、必要なときに、utf8mb4を使用
解釈:
(1)一般的な、歪みのない、3バイト文字のリスク、英語の1バイト
(2)utf8mb4のUTF8は、例えば、メモリ4バイトの顔文字のスーパーセットで、それを使用します
- ストアドプロシージャ、ビュー、トリガ、イベントの使用を禁止します
解釈:
(1)データベースのパフォーマンス、インターネットビジネスに大きな影響は、サイトとサービス層が行うとデータベース層を見つけることができません作る
(2)デバッグ、トラブルシューティング、移行、あるはより困難、貧しいスケーラビリティ
- 大きなファイルは大きなファイルは、オブジェクト・ストレージ・システム、データベース・ストレージ・パスに格納することができ、そのような写真など、データベースに格納されている禁止
- 禁止データベース環境のオンラインストレステストを行います
- テスト、開発、オンラインデータベース環境を隔離する必要があります
第二に、命名規則
- 採用下線で区切られたカラム名は小文字でなければならないライブラリ名、テーブル名、
解釈:ABC、ABC、ABCは彼らの墓地にあります
- データベース名、テーブル名、列名が32文字より長くない、正義の名を知って見なければなりません
解釈:tmpが、巫TMは、これらのライブラリをやっている人知っています
- データベースのバックアップは、接頭辞、接尾日としてBAK必要があります
- ライブラリからの接尾辞である必要があります-s
- サフィックスを-ssしなければならないライブラリ機器
表の第三に、設計ルール
- シングルインスタンス・テーブルの数は、2000年以内に制御されなければなりません
- パーツテーブルの数が単一のテーブルには、1024年以内に制御しなければなりません
- テーブルには、符号なし整数主キーを使用することが推奨され、主キーを持っている必要があります
- 潜在的なピット:それは建築からローのプライマリモードである場合、主キーがないテーブルを削除し、ライブラリからはキャッチされます
- 外部キーの使用を禁止し、あなたが整合性を確保したい場合は、アプリケーションが実現しなければなりません
解釈:外部キーは、テーブル間の相互結合は、影響力の更新は/プロパティのようなSQLを削除して、デッドロックを引き起こす可能性があり、それは高い並行処理のボトルネックデータベースになりやすいので、
- 大きなフィールドを壊すお勧め、低アクセス頻度のフィールドは、別のテーブルに格納されたホットとコールドデータの分離されています
解釈:特定のは、「データベースの縦割りを実装する方法」に参加して
4列の設計仕様
- tinyint型/ INT / bigint型を使用して、サービスの差別化は、それぞれ1/4/8バイトを占めています
- 文字/ varchar型を使用して、サービスの差別化
解釈:
(1)固定フィールド長、または約ビジネスシナリオ、適切なチャーの長さ、デブリを低減することができ、高性能なクエリ
が大きいほど、より少ないまたは更新ビジネスシナリオ、適切なVARCHARの間(2)フィールドの長さの差を小さくすることができますスペース
- に従って日時/タイムスタンプサービスの差別化を使用します
解釈:前者はYEARを使用してメモリ内の4バイトであり、5つのバイトを占有し、日時を使用して日付、蓄積時間を使用して日付を格納します
- フィールドは、NOT NULLと設定されたデフォルト値として定義する必要があります
解釈:
(1)列のNULLインデックス、索引統計を使用して、値がより複雑で、MySQLの難しい最適化は、
(2)NULLは、より多くのストレージスペースを必要とする
(3)NULLのみ使用がnullであるか=で、NULLではありません/!= / /でピットに時間を持っていません
- 文字を使用しない、(15)INT UNSIGNEDストレージのIPv4を使用します
- 整数を使用していない、電話番号を保存するためにはvarchar(20)を使用します
解釈:
-例えば、86、AS /()文字(1)国コードを伴う、+ /表示される場合があります
(2)電話番号が数学を行うために使用されることはありませんが、
(3)varchar型は「138パーセント」のよう、例えば、あいまいクエリすることができ
- 代わりに、ENUMを使用してのTINYINT
解釈:ENUM DDL操作に新しい値を追加
V.インデックスの仕様
- [フィールド名]をuniq_使用する唯一のインデックスは、名前付き
- 名前の非一意のインデックスidx_ [フィールド名]を使用します
- 5つ未満で推奨コントロールのシングルテーブルのインデックス番号
解釈:
(1)並行性の高いインターネットビジネス、あまりにも多くの書き込み性能指数に影響を与えることができます
(2)とき、実行計画、インデックスが多すぎると、パフォーマンスが低下し、最適な選択のMySQLのインデックス未満をもたらすことができる
(3)異常に複雑なクエリが必要とする、あなたは、より適切なESを選択し、他の保存することができます
- 複合インデックス番号フィールドが5以上のものを推奨していません
解釈:5つのフィールドそうでない場合は非常に狭い行範囲の設計上の問題の80パーセント
- フィールド、頻繁に更新されたインデックスに基づいて推奨されません
- あなたは、クエリに参加したい場合は、フィールドは、JOINとインデックスの同じタイプでなければなりません、クエリのJOIN不要にしないでください
解釈:一貫性のないステップなのでピットそれの全表スキャンにつながったフィールドタイプを、登録しようか!
- 最も左のプレフィックス、複合インデックスの原理を理解しての確立場合、重複インデックスを避ける(a、b、c)は、(a)は、(a、b)は、(A、B、C)の設立に相当
六、SQLの仕様
- SELECT * FROMの使用を禁止する、唯一の必要なフィールドを取得します
解釈:
(1)SELECT * CPU / IO /メモリ/帯域幅の消費を増加させる
覆う指定されたフィールドインデックスの(2)有効活用
テーブル構造の変更は、アプリケーションに影響を確保しないようにするとき(3)クエリのフィールドを指定し、
- フィールドが指定されなければならない挿入、T値にインサートの使用を禁止()
解釈:指定されたフィールドは、アプリケーションに影響を確保しないように、テーブル構造の変更に挿入され
- 暗黙の型変換指数は、全表スキャンで、その結果、失敗します
- 列関数や条件式の使用を禁止します
解釈:原因は、インデックス、全表スキャンを打つことができません
- 問い合わせおよび%の初めに負のあいまいクエリを禁止
解釈:原因は、インデックス、全表スキャンを打つことができません
- 大きなテーブルとサブクエリを禁止登録しよう
- OR同じフィールドがQのオン書き換える必要があり、IN、値が50未満である必要があります
- アプリケーションは、SQL例外をキャッチする必要があります
解釈:オンライン問題を見つけやすいです
説明:に適用されるこの軍事規制同時大型、大量のデータの代表的なインターネットビジネス、参照は直接離れて撮影することができ、それを言及しないでください。
陸軍規制演習:なぜSQLインデックス、次の電話を打つことができませんか?
ユーザーからのUIDを選択する場所電話= 13811223344