MySQL索引の表示、作成、削除

2906 ワード

索引の作成CREATE TABLE文を実行するときにインデックスを作成するか、CREATE INDEXまたはALTER TABLEを単独で使用してテーブルにインデックスを追加できます.
1.ALTER TABLE
ALTER TABLEは、通常のインデックス、UNIQUEインデックス、またはPRIMARY KEYインデックスを作成するために使用されます.
ALTER TABLE table_name ADD INDEX index_name (column_list) USING BTREE;
ALTER TABLE table_name ADD UNIQUE (column_list) USING BTREE;
ALTER TABLE table_name ADD PRIMARY KEY (column_list) USING BTREE;

ここでtable_nameはインデックスを追加するテーブル名、column_listは、どのカラムをインデックスするかを示し、複数カラムの場合、各カラム間をカンマで区切る.インデックス名index_nameはオプションで、デフォルトではMySQLは最初のインデックス列に基づいて名前を付けます.また、ALTER TABLEでは、単一の文で複数のテーブルを変更できるため、同時に複数のインデックスを作成できます.
2.CREATE INDEX
CREATE INDEXは、テーブルに通常のインデックスまたはUNIQUEインデックスを追加します.
CREATE INDEX index_name ON table_name (column_list) USING BTREE;
CREATE UNIQUE INDEX index_name ON table_name (column_list) USING BTREE;

table_name、index_nameとcolumn_リストにはALTER TABLE文と同じ意味があり、インデックス名はオプションではありません.また、CREATE INDEX文でPRIMARY KEYインデックスを作成することはできません.
3.索引タイプ
インデックスを作成するときに、インデックスに重複値が含まれるかどうかを指定できます.含まない場合は、インデックスはPRIMARY KEYまたはUNIQUEのインデックスとして作成する必要があります.単一カラムの一意性インデックスの場合、単一カラムに重複する値が含まれないことを保証します.複数のカラムの一意性インデックスの場合、複数の値の が重複しないことを保証します.PRIMARY KEYインデックスとUNIQUEインデックスは非常に類似しています.実際、PRIMARY KEYインデックスは、PRIMARYという名前のUNIQUEインデックスのみです.これは、1つのテーブルに2つの のインデックスを持つことができないため、1つのテーブルに1つのPRIMARY KEYしか含まれないことを示します.
4.索引の削除ALTER TABLEまたはDROP INDEX文を使用してインデックスを削除できます.CREATE INDEX文と同様に、DROP INDEXはALTER TABLE内部で文として処理できます.構文は次のとおりです.
DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY

ここで、最初の2つの文は等価であり、table_nameのインデックスindex_nameを削除する.
第3条文 PRIMARY KEYインデックスを削除する際に使用します.1つのテーブルに1つのPRIMARY KEYインデックスしか存在しないため、インデックス名を指定する必要はありません.PRIMARY KEYインデックスが作成されていないが、テーブルに1つ以上のUNIQEインデックスがある場合、MySQLは最初のUNIQEインデックスを削除します.
テーブルからカラムを削除すると、インデックスが影響を受けます.複数のカラムの組合せのインデックスの場合、カラムのいずれかを削除すると、そのカラムもインデックスから削除されます.インデックスを構成するすべてのカラムを削除すると、インデックス全体が削除されます.
5.索引の表示
mysql> show index from tblname; mysql> show keys from tblname;
・Tableテーブルの名前.・Non_Uniqueインデックスに重複語が含まれない場合は0です.可能であれば1です.・Key_nameインデックスの名前.・Seq_in_indexインデックスのカラムシーケンス番号は、1から始まります.・Column_name列名.・Collation列はインデックスにどのように格納されますか.MySQLでは、値‘A’(昇順)またはNULL(分類なし)があります.・Cardinalityインデックス内の一意の値の数の推定値.ANALYZE TABLEまたはmyisamchk-aを実行することで更新できます.基数は整数として格納された統計データに基づいてカウントされるので、小型テーブルであっても正確な値である必要はない.基数が大きいほど、連携を行う場合、MySQLがそのインデックスを使用する機会が大きくなります.・Sub_partカラムが部分的にインデックスに組み込まれている場合は,インデックスに組み込まれた文字の数である.カラム全体がインデックスに組み込まれている場合はNULLとなります.・Packedはキーワードがどのように圧縮されるかを示します.圧縮されていなければNULLとなります.・NullカラムにNULLが含まれている場合、YESが含まれます.なければ、その列にはNOが含まれている.・Index_typeが使用したインデックスメソッド(BTREE,FULLTEXT,HASH,RTREE).Comment