この記事では、MySQL のインデックスを表示、作成、削除する方法を主に紹介し、例の形で詳細に mysql を扱います。インデックスの表示、作成、および削除に関する関連実装のヒントも含まれています。
この記事の例では、MySQL でインデックスを表示、作成、削除する方法を説明します。皆さんの参考に共有してください。詳細は以下の通りです:
1.インデックス機能
インデックス列では、上記の順序付けされた検索に加えて、データベースはさまざまな高速測位テクノロジを使用して、クエリの効率を大幅に向上させます。特にデータ量が非常に多く、クエリに複数のテーブルが含まれる場合、インデックスを使用するとクエリが何千倍も高速化することがあります。
たとえば、インデックスのないテーブル t1、t2、t3 が 3 つあり、それぞれ列 c1、c2、c3 のみが含まれており、各テーブルには 1 から 1000 までの値を参照する 1000 行のデータが含まれています。値が等しい場合のクエリを以下に示します。
SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3
このクエリの結果は 1000 行になり、各行には 3 つの等しい値が含まれます。インデックスを使用せずにこのクエリを処理するには、3 つのテーブルのすべての組み合わせを検索して、WHERE 句に一致する行を取得する必要があります。可能な組み合わせの数は 1000×1000×1000 (10 億) であるため、明らかにクエリは非常に遅くなります。
各テーブルにインデックスが付けられている場合、クエリプロセスを大幅に高速化できます。インデックスを利用したクエリ処理は以下のとおりです。
(1) テーブル t1 の最初の行を選択して、この行に含まれるデータを表示します。
(2) テーブル t2 のインデックスを使用して、t1 の値に一致する t2 内の行を直接見つけます。同様に、テーブル t3 のインデックスを使用して、t1 の値と一致する t3 内の行を直接見つけます。
(3) テーブル t1 の次の行をスキャンし、t1 のすべての行が走査されるまで前のプロセスを繰り返します。
この場合、フル スキャンはテーブル t1 で引き続き実行されますが、テーブル t2 および t3 のインデックス ルックアップを実行して、これらのテーブル内の行を直接取得できます。これは、インデックスを使用しない場合よりも 100 万倍高速です。
インデックスを使用することで、MySQL は WHERE 句の条件を満たす行の 検索 を高速化します。また、複数テーブルの結合クエリを実行する場合、結合を実行するときに他のテーブル内の一致する行を高速化します。
2. インデックスの作成
CREATE TABLE ステートメントの実行時にインデックスを作成することも、CREATE INDEX または ALTER TABLE を単独で使用してテーブルにインデックスを追加することもできます。
1. ALTER TABLE
ALTER TABLE は、通常のインデックス、UNIQUE インデックス、または PRIMARY KEY インデックスを作成するために使用されます。
ALTER TABLE table_name ADD INDEX index_name (column_list) ALTER TABLE table_name ADD UNIQUE (column_list) ALTER TABLE table_name ADD PRIMARY KEY (column_list)
ここで、table_name はインデックスを作成するテーブルの名前、column_list はインデックスを作成する列を示します。複数の列がある場合は、カンマで区切ります。インデックス名index_nameはオプションです。デフォルトでは、MySQLは最初のインデックス列に基づいて名前を割り当てます。さらに、ALTER TABLE を使用すると、単一のステートメントで複数のテーブルを変更できるため、複数のインデックスを同時に作成できます。
2. CREATE INDEX
CREATE INDEX は、テーブルに通常のインデックスまたは UNIQUE インデックスを追加できます。
CREATE INDEX index_name ON table_name (column_list) CREATE UNIQUE INDEX index_name ON table_name (column_list)
table_name、index_name、column_list は ALTER TABLE ステートメントと同じ意味を持ち、インデックス名はオプションではありません。また、CREATE INDEX ステートメントを使用して PRIMARY KEY インデックスを作成することはできません。
3.インデックスの種類
インデックスを作成するときに、インデックスに重複した値を含めることができるかどうかを指定できます。含めない場合は、インデックスを PRIMARY KEY または UNIQUE インデックスとして作成する必要があります。単一列の一意のインデックスの場合、これにより、単一列に重複値が含まれないことが保証されます。複数列の一意のインデックスの場合、複数の値の組み合わせが繰り返されないことが保証されます。
PRIMARY KEY インデックスと UNIQUE インデックスは非常に似ています。実際、PRIMARY KEY インデックスは PRIMARY という名前の単なる UNIQUE インデックスです。これは、テーブル内に同じ名前のインデックスを 2 つ持つことは不可能であるため、テーブルには PRIMARY KEY を 1 つだけ含めることができることを意味します。
次の SQL ステートメントは、sid の PRIMARY KEY インデックスを Students テーブルに追加します。
コードは次のとおりです:
ALTER TABLE students ADD PRIMARY KEY (sid)
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 インデックスを削除する場合にのみ使用されます。テーブルには PRIMARY KEY インデックスが 1 つしか持てないため、インデックス名を指定する必要はありません。 PRIMARY KEY インデックスが作成されていないが、テーブルに 1 つ以上の UNIQUE インデックスがある場合、MySQL は最初の UNIQUE インデックスを削除します。
テーブルから列が削除されると、インデックスが影響を受けます。複数列インデックスの場合、列の 1 つが削除されると、その列もインデックスから削除されます。インデックスを構成するすべての列を削除すると、インデックス全体が削除されます。
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
总结:
通过本文的详细学习,相信有很多小伙伴对MySQL实现查看与创建以及删除索引的方法有了进一步的了解,希望对你有所帮助!
相关推荐:
以上がMySQL でインデックスを表示、作成、削除する方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。