Mysqlのプライマリ・キーとインデックス

4607 ワード

リレーショナル・データはプライマリ・キーに依存し、プライマリ・キーは物理的に主に2つの用途があります.
  • 唯一の識別1行プライマリ・キーが1行のレコードを一意に識別できるため、データの更新、削除を実行する際に張冠李戴のエラーが発生しないことを確保できます.
  • 外部キーで参照可能なオブジェクトとしてのテーブルのプライマリ・キーは、通常、別のテーブルの外部キーとして使用できます.プライマリ・キーは、外部キーと参照完了制約を構成することによって、データの不一致を防止します.

  • プライマリ・キーは、単列プライマリ・キーと複合プライマリ・キーに分けられます.
  • 単一プライマリ・キー:1つの列のみを使用して、1つの行
    create table user(
        id varchar(4) primary key,  #     
        name varchar(4) not null, 
        email varchar(20) not null ,
        efftflag varchar(1) not null 
    )
    
  • を一意に識別します.
  • 連合プライマリ・キー:1つの列を使用して1つの行を一意に表すことができない場合、複数の列を使用して1つの行を一意に識別する必要があります.複合プライマリ・キー
    create table uesr(
        id varchar(4) not null, 
        name varchar(6) not null,
        email varchar(3) not null, 
        efftflag varchar(1) not null, 
        primary key(id ,name )  #     
    )
    
  • です.
    インデックスは特殊なファイル(InnoDBデータテーブル上のインデックスはテーブル空間の構成部分)であり、データテーブル内のすべてのレコードに対する参照ポインタが含まれています.インデックスは、辞書のディレクトリに相当するクエリー速度を向上させ、テーブル全体のスキャンを必要とせずに結果をすばやくクエリーできます.しかし、インデックスの使用が多すぎると、テーブルの更新速度が低下します.たとえば、テーブルにINSERT、UPDATE、DELETEを行うと、Msqlはデータだけでなく、インデックスファイルも保存します.
    インデックスは、単列インデックスと複合インデックスに分けられます.
  • 単一カラムインデックス:インデックスとして使用されるカラムは1つのみで、デフォルトではindexインデックスです.このカラムには重複データが含まれます.カラムに重複データが存在しない場合は、indexのインデックスよりも高速な一意のインデックスunique形式に設定することが望ましい.
  • 複合インデックス:検索のたびに複数のカラムを使用する必要がある場合は、複数のカラムを複合インデックスに設定できます.複数のカラムが一意かどうかによってindexインデックスとuniqueインデックスにも分けられます.【注意】複合インデックスの場合:Mysqlは、インデックスのフィールドを左から右に使用します.クエリーはインデックスの一部のみを使用できますが、左側の部分でなければなりません.インデックスがindexName(a,b,c)の場合、a|a,b|a,b,cの3つの組み合わせで検索をサポートできます.

  • 全体的に、プライマリ・キーは本のページ番号に相当し、インデックスは本のディレクトリに相当します.
    両者の比較:
  • プライマリ・キーは一定の一意性インデックスであるが、一意性インデックスは、プライマリ・キー・データベース管理システムがプライマリ・キーに対して自動的に一意のインデックスを生成するとは限らないため、プライマリ・キーは特殊なインデックス
  • である.
  • 一意のインデックスは、インデックス値が一意であることを示します.1つのテーブルに複数の一意のインデックスがありますが、プライマリ・キーには
  • しかありません.
  • プライマリ・キー列は空にすることはできませんが、一意のインデックス列は空の
  • にすることができます.
  • テーブルには1つのプライマリ・キーしかありませんが、複数のインデックス
  • があります.
    参考ブログ:https://blog.csdn.net/qq_38724327/article/details/79880636