ホームページ  >  記事  >  データベース  >  mysqlのインデックスタイプとは何ですか

mysqlのインデックスタイプとは何ですか

清浅
清浅オリジナル
2019-03-30 11:22:0072522ブラウズ

mysql のインデックス タイプは次のとおりです: 1. 通常のインデックス、2. 一意のインデックス、3. 主キー インデックス、4. 結合インデックス、5. フルテキスト インデックス。通常のインデックスは最も基本的なインデックスであり、制限はありません。一意のインデックスでは、インデックス列の値が一意である必要がありますが、NULL 値も許可されます。

mysqlのインデックスタイプとは何ですか

#MySQL のインデックス タイプは次のとおりです。

  • 通常のインデックス

  • 一意のインデックス

  • ##主キー インデックス
  • ##複合インデックス
  • #フルテキスト インデックス

  • (推奨チュートリアル:

    mysql ビデオ チュートリアル
  • )

1. 通常のインデックス

は最も基本的なインデックスであり、制限はありません。次の作成方法があります。

インデックスを直接作成する

CREATE INDEX index_name ON table(column(length))

テーブル構造を変更してインデックスを追加する

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

テーブルの作成と同時にインデックスを作成します

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,    PRIMARY KEY (`id`),    INDEX index_name (title(length))
)

インデックスを削除します

DROP INDEX index_name ON table
2.一意のインデックス

前の通常のインデックスと同様に、違いはインデックス列の値が一意である必要がありますが、NULL 値が許可されることです。複合インデックスの場合、列値の組み合わせは一意である必要があります。次の作成方法があります:

一意のインデックスの作成

CREATE UNIQUE INDEX indexName ON table(column(length))

テーブル構造の変更

ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))

作成 テーブルを指定する場合、

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,
    UNIQUE indexName (title(length))
);

3 を直接指定します。主キー インデックス

は特別な一意のインデックスです。テーブルには主キーを 1 つだけ持つことができ、null は含めることができません値は許可されます。通常、主キー インデックスはテーブルの作成時に同時に作成されます:

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) NOT NULL ,    PRIMARY KEY (`id`)
);
4. 複合インデックス

は、複数のフィールドに対して作成されたインデックスを指します。作成されたインデックスのみクエリ条件に が使用され、最初のフィールドの場合はインデックスが使用されます。複合インデックスを使用する場合は、左端のプレフィックス セット

ALTER TABLE `table` ADD INDEX name_city_age (name,city,age);
5 に従います。フルテキスト インデックス

は、値と直接比較するのではなく、主にテキスト内のキーワードを検索するために使用されます。インデックスにあります。フルテキスト インデックスは他のインデックスとは大きく異なり、where ステートメントの単純なパラメータ マッチングではなく、検索エンジンに似ています。フルテキスト インデックスは、一般的な where ステートメントと like の代わりに match match 操作で使用されます。これは、create table、a​​lter table、create Index で使用できますが、現在、char、varchar、および text 列に作成できるのはフルテキスト インデックスのみです。データの量が多い場合は、最初にテーブルのフルテキストを作成してから、データの速度がはるかに速くなります。

テーブル作成時にフルテキストインデックスを追加するのが適切です

CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,    PRIMARY KEY (`id`),
    FULLTEXT (content)
);
テーブル構造を変更してフルテキストインデックスを追加します

ALTER TABLE article ADD FULLTEXT index_content(content)

インデックスを直接作成する

CREATE FULLTEXT INDEX index_content ON article(content)

欠点

1. インデックスによりクエリ速度が大幅に向上しますが、テーブルの挿入や更新などのテーブルの更新速度を低下させたり、削除したりします。テーブルを更新するときは、データを保存するだけでなく、インデックス ファイルも保存する必要があるためです。 2. インデックス ファイルを作成すると、ディスク領域が占有されます。通常、この問題は深刻ではありませんが、大きなテーブルに複数の結合インデックスを作成すると、インデックス ファイルが急速に大きくなります。インデックスは効率を向上させる要素の 1 つにすぎません。大量のデータを含むテーブルがある場合は、最適なインデックスの調査と構築、またはクエリ ステートメントの最適化に時間を費やす必要があります。

注意事項

インデックスを使用する場合、いくつかのヒントと注意事項があります: 1. インデックスには NULL 値を持つ列は含まれません

列に null 値が含まれている限り、その列はインデックスに含まれません。複合インデックス内の 1 つの列に null 値が含まれている限り、この列は複合インデックスに対して無効になります。したがって、データベースを設計するときは、フィールドのデフォルト値を null にしないでください。

2. 短いインデックス

を使用して文字列のインデックスを作成します。可能であれば、プレフィックスの長さを指定する必要があります。たとえば、char(255) 列がある場合、ほとんどの値が最初の 10 文字または 20 文字内で一意である場合は、列全体にインデックスを付けないでください。短いインデックスはクエリ速度を向上させるだけでなく、ディスク領域と I/O 操作を節約します。

3. インデックス列の並べ替え

クエリではインデックスが 1 つだけ使用されるため、インデックスが where 句で使用されている場合、順序付けされた列はインデックスを使用しません。したがって、データベースのデフォルトの並べ替えで要件を満たすことができる場合は、並べ替え操作を使用しないでください。複数の列の並べ替えを含めないようにしてください。必要に応じて、これらの列に対して複合インデックスを作成することをお勧めします。

4. like 文の操作

一般的には like 操作の使用は推奨されていませんが、どうしても使用しなければならない場合には、どのように使用するかも問題となります。 「�a%」のようにインデックスは使用されませんが、「aaa%」のようにインデックスは使用されます。

5.列に対して操作を実行しないでください。これにより、インデックスが失敗し、

SELECT * FROM table_name WHERE YEAR(column_name)<2017;

6 などのテーブル全体のスキャンが実行されます。not in および a8093152e673feb7aba1828c43532094 は使用しないでください。オペレーション###

以上がmysqlのインデックスタイプとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。