MySQL インデックスのチュートリアル – 作成、追加、削除
インデックスとは何ですか?
のインデックス MySQL データを整理された順序で並べ替えます。これらは、データのフィルター処理に使用される列に作成されます。インデックスは、アルファベット順にソートされたリストであると考えてください。アルファベット順にソートされた名前の方が、ソートされていない名前よりも簡単に検索できます。
頻繁に更新されるテーブルにインデックスを使用すると、パフォーマンスが低下する可能性があります。それの訳は MySQL テーブル内でデータが追加または更新されるたびに、新しいインデックス ブロックが作成されます。一般に、インデックスは、データが頻繁に変更されないが選択検索クエリで頻繁に使用されるテーブルで使用する必要があります。
インデックスって何に使うの?
遅いシステムを好む人はいません。 ほぼすべてのデータベース システムにおいて、高いシステム パフォーマンスが最も重要です。 ほとんどの企業は、データの取得と操作を高速化するためにハードウェアに多額の投資を行っています。 しかし、企業が行えるハードウェア投資には限界があります。 データベースを最適化することは、より安価で優れたソリューションです。
応答時間の遅さは通常、レコードがデータベース テーブルにランダムに格納されることが原因です。 検索クエリは、目的のデータを見つけるために、ランダムに保存されたレコード全体を順番にループする必要があります。 そのため、大きなテーブルからデータを取得する場合、データベースのパフォーマンスが低下します。 したがって、検索を容易にするためにデータを並べ替えるインデックスが使用されます。
構文: インデックスの作成
インデックスは 2 つの方法で定義できます
- テーブル作成時
- テーブルの作成後
例:
myflixdb では、フルネームでデータベースが大量に検索されることが予想されます。
新しいテーブル「members_indexed」のインデックスに「full_names」列を追加します。
以下に示すスクリプトは、これを実現するのに役立ちます。
CREATE TABLE `members_indexed` ( `membership_number` int(11) NOT NULL AUTO_INCREMENT, `full_names` varchar(150) DEFAULT NULL, `gender` varchar(6) DEFAULT NULL, `date_of_birth` date DEFAULT NULL, `physical_address` varchar(255) DEFAULT NULL, `postal_address` varchar(255) DEFAULT NULL, `contact_number` varchar(75) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, PRIMARY KEY (`membership_number`),INDEX(full_names) ) ENGINE=InnoDB;
上記のSQLスクリプトを実行します。 MySQL 「myflixdb」に対するワークベンチ。
myflixdb を更新すると、 members_indexed という名前の新しく作成されたテーブルが表示されます。
"注意" members_indexed テーブルのインデックス ノードには「full_names」が含まれています。
メンバー ベースが拡大し、レコード数が増加すると、WHERE 句と ORDER BY 句を使用する members_indexed テーブルに対する検索クエリは、インデックスが定義されていない members テーブルで実行される検索クエリと比べてはるかに高速になります。
インデックスの基本構文を追加する
上記の例では、データベーステーブルを定義するときにインデックスを作成しました。 すでにテーブルが定義されており、そのテーブルに対する検索クエリが非常に遅いとします。 結果が返されるまでに時間がかかりすぎます。 問題を調査した結果、WHERE 句で最もよく使用される列に INDEX を作成すると、システムのパフォーマンスが大幅に向上することがわかりました。
インデックスを追加するには次のクエリを使用します
CREATE INDEX id_index ON table_name(column_name);
映画テーブルの検索クエリが非常に遅く、クエリを高速化するために「映画のタイトル」のインデックスを使用したい場合、次のスクリプトを使用してこれを実現できます。
CREATE INDEX `title_index` ON `movies`(`title`);
上記のクエリを実行すると、映画テーブルのタイトル フィールドにインデックスが作成されます。
これは、「タイトル」を使用した映画テーブルのすべての検索クエリが高速になることを意味します。
ただし、映画テーブルの他のフィールドに対する検索クエリは、インデックス付きフィールドに基づく検索クエリと比較すると依然として遅くなります。
注意: データベース検索エンジンに使用するフィールドに応じて、必要に応じて複数の列にインデックスを作成できます。
特定のテーブルに定義されているインデックスを表示する場合は、次のスクリプトを使用できます。
SHOW INDEXES FROM table_name;
次に、myflixdb の movie テーブルに定義されているすべてのインデックスを見てみましょう。
SHOW INDEXES FROM `movies`;
上記のスクリプトを実行すると、 MySQL 作業台 myflixdb に対して、作成されたインデックスに関する結果が得られます。
注意: テーブルの主キーと外部キーには、すでにインデックスが作成されています。 MySQL。 各インデックスには独自の一意の名前があり、インデックスが定義されている列も表示されます。
構文: インデックスを削除
drop コマンドは、テーブルにすでに定義されているインデックスを削除するために使用されます。
頻繁に更新されるテーブルにインデックスがすでに定義されている場合があります。 UPDATE クエリと INSERT クエリのパフォーマンスを向上させるために、このようなテーブルのインデックスを削除することもできます。 テーブルのインデックスを削除するために使用される基本的な構文は次のとおりです。
DROP INDEX `index_id` ON `table_name`;
それでは実際の例を見てみましょう。
DROP INDEX ` full_names` ON `members_indexed`;
上記のコマンドを実行すると、ID が「full_names」のインデックスが members_indexed テーブルから削除されます。
製品概要
- インデックスは、パフォーマンスを大幅に向上させる上で非常に強力です。 MySQL 検索クエリ。
- インデックスは、テーブルの作成時に定義することも、テーブルの作成後に後から追加することもできます。
- テーブル上の複数の列にインデックスを定義できます。
- SHOW INDEX FROM table_name は、テーブルに定義されているインデックスを表示するために使用されます。
- DROP コマンドは、特定のテーブルに定義されているインデックスを削除するために使用されます。