58家MySQL軍規アップグレード版

3493 ワード

一、基礎規範
  • テーブルストレージエンジンはInnoDB
  • を使用する必要があります.
  • 表文字セットデフォルトではutf 8が使用され、必要に応じてutf 8 mb 4
  • が使用されます.
      :
    
    (1)  ,     ,  3  ,  1  
    
    (2)utf8mb4 utf8   ,   4         ,   
    
  • ストレージ・プロシージャ、ビュー、トリガ、Event
  • の使用を禁止
      :
    
    (1)          ,     ,             ,        
    
    (2)  ,  ,       ,     
    
  • は、写真のような大きなファイルをデータベースに格納ことを禁止する、オブジェクトストレージシステムに大きなファイルを格納することができ、データベースにはパス
  • が格納.
  • オンライン環境でのデータベース圧力テストを禁止
  • テスト、開発、オンラインデータベース環境は
  • 隔離しなければならない.
    二、命名規範
  • ライブラリ名、テーブル名、カラム名は小文字で、下線で
  • を区切る必要があります.
      :abc,Abc,ABC       
    
  • ライブラリ名、テーブル名、カラム名は、32文字を超えないでください.
  •   :tmp,wushan TM         
    
  • ライブラリバックアップはbakを接頭辞とし、日付を接尾辞とする
  • でなければならない.
  • ライブラリから-sを接尾辞とする必要があります
  • リポジトリは、-ssを接尾辞とする必要があります
  • 三、表設計規範
  • 単一インスタンステーブルの数は、2000個以内の
  • に制御する必要があります.
  • 単表分表の個数は1024個以内の
  • に制御しなければならない.
  • テーブルにはプライマリ・キーが必要です.UNSIGNED整数をプライマリ・キー
  • として使用することを推奨します.
  • 潜在ピット:プライマリ・キーのないテーブルを削除し、rowモードのプライマリ・スレーブ・アーキテクチャの場合、ライブラリから
  • がマウントされます.
  • 外部キーの使用を禁止し、完全性を保証するには、
  • をアプリケーションによって実現する必要があります.
      :           ,  update/delete SQL  ,       ,               
    
  • は、大きなフィールド、アクセス頻度の低いフィールドを個別のテーブルに分割して格納、冷熱データ
  • を分離することを提案する.
      :    《           》
    

    四、列設計規範
  • は業務区分に応じてtinyint/int/bigintを使用し、それぞれ1/4/8バイトの
  • を占有する.
  • ビジネス区分によるchar/varchar
  • の使用
      :
    
    (1)      ,           ,    char,      ,     
    
    (2)        ,           ,    varchar,      
    
  • 業務区分によるdatetime/timestamp
  • の使用
      :    5   ,    4   ,     YEAR,      DATE,      datetime
    
  • フィールドをNOT NULLとして定義、デフォルト値
  • を設定する必要があります.
      :
    
    (1)NULL      ,    ,      ,MySQL    
    
    (2)NULL         
    
    (3)NULL    IS NULL  IS NOT NULL,  =/!=/in/not in    
    
    
  • INT UNSIGNEDを使用してIPv 4を格納し、char(15)
  • を使用しない
  • varchar(20)を使用して携帯電話番号を格納し、整数
  • を使用しないでください.
      :
    
    (1)       ,    +/-/()   ,  +86
    
    (2)            
    
    (3)varchar      ,  like ‘138%’
    
    
  • ENUM
  • の代わりにTINYINTを使用
      :ENUM       DDL  
    
    

    五、索引規範
  • ユニークインデックスuniq_を使用[フィールド名]には
  • という名前が付けられています.
  • 非一意インデックスidx_を使用[フィールド名]には
  • という名前が付けられています.
  • 単一テーブルインデックス数推奨5個以内
  •   :
    
    (1)        ,          
    
    (2)       ,      ,     ,     MySQL        
    
    (3)         ,    ES          
    
  • 結合インデックスフィールドの数は、5つの
  • を超えることは推奨されません.
      :  5          row  ,        
    
  • 頻繁に更新されるフィールドにインデックス
  • を作成することは推奨されません.
  • JOINクエリを行う必要はなく、JOINクエリを行う場合は、被JOINのフィールドタイプが同じである必要があり、インデックス
  • を作成する.
      :    JOIN       ,          ?
    
    
  • 結合インデックスの最左接頭辞の原則を理解し、重複建設インデックスを避ける.(a,b,c)が確立された場合、(a)、(b)、(a,b)、(a,b,c)
  • が確立されたことに相当する.
    六、SQL規範
  • select*の使用を禁止し、必要なフィールド
  • のみを取得します.
      :
    
    (1)select *   cpu/io/  /     
    
    (2)             
    
    (3)      ,       ,           
    
    
  • insertはフィールドを指定する必要があります.insert into T values()
  • の使用を禁止します.
      :      ,       ,           
    
  • 暗黙型変換はインデックスを失効させ、全テーブルスキャン
  • を引き起こす.
  • where条件列での関数または式の使用を禁止する
  •   :        ,    
    
  • 負のクエリおよび%先頭のファジイクエリを禁止
  •   :        ,    
    
  • 大表JOINとサブクエリ禁止
  • 同じフィールド上のORはINを書き換える必要があり、INの値は50個より少なくなければならない
  • アプリケーションはSQL例外
  • をキャプチャする必要があります

    説明:本軍規は同時量が大きく、データ量が大きい典型的なインターネット業務に適しており、直接参考にすることができ、感謝しない.