ホームページ データベース mysql チュートリアル mysqlデータベースのインデックスにはどのような種類がありますか?設置方法とメリット・デメリット

mysqlデータベースのインデックスにはどのような種類がありますか?設置方法とメリット・デメリット

Aug 07, 2018 pm 02:55 PM
mysqlインデックス

この記事では、4 種類の masql データベース インデックスの説明に焦点を当てます。データベース インデックスを作成するにはどうすればよいですか? WHERE および JOIN に出現する列にはインデックスを付ける必要がありますが、MySQL は <、<=、=、>、>=、BETWEEN、IN、および場合によっては LIKE のみを使用するため、完全にインデックスを付ける必要はありません。この記事が皆さんのお役に立てれば幸いです。まず、インデックスとは何かを理解しましょう。インデックスは高速検索の鍵です。

MySQL インデックスの確立は、MySQL を効率的に運用するために非常に重要です。以下では、いくつかの一般的な MySQL インデックス タイプを紹介します

データベース テーブルでは、フィールドにインデックスを付けると、クエリ速度が大幅に向上します。 mytable テーブルを作成するとします:

コードは次のとおりです:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL );

10,000 レコードをランダムに挿入しました。そのうちの 1 つは 5555 です。管理者。

username="admin" SELECT * FROM mytable WHERE username='admin'; のレコードを検索するとき、username にインデックスが確立されていれば、MySQL はスキャンせずに正確にレコードを見つけることができます。逆に、MySQL はすべてのレコードをスキャンします。つまり、10,000 レコードがクエリされます。

インデックスは、単一列インデックスと結合インデックスに分かれています。単一列インデックスは、インデックスに 1 つの列のみが含まれることを意味します。テーブルには複数の単一列インデックスを含めることができますが、これは結合されたインデックスではありません。結合インデックス。つまり、1 つのインデックスに複数の列が含まれます。

MySQL インデックス タイプには次のものが含まれます:

1. 通常のインデックス

これは最も基本的なインデックスであり、制限はありません。以下の作成メソッドがあります:

1. インデックスを作成します

コードは次のとおりです:

CREATE INDEXindexName ON mytable(username(length));

CHAR、VARCHAR 型の場合、長さはそれより小さくてもかまいませんフィールドの実際の長さよりも長く、BLOB 型および TEXT 型の場合は長さを指定する必要があります。以下同様です。

2. テーブル構造を変更します

コードは次のとおりです:
ALTER mytable ADD INDEX [indexName] ON (username(length)) -- テーブル作成時に直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16 ) NOT NULL, INDEX [indexName] (username(length)) );

-- インデックスを削除する構文:

DROP INDEX [indexName] ON mytable; 2. 一意のインデックス

前の通常のインデックスと同じです。インデックス列の値が一意である必要がある点を除き、インデックスは似ていますが、NULL 値が許可されます。複合インデックスの場合、列値の組み合わせは一意である必要があります。次の作成メソッドがあります:

コードは次のとおりです:

CREATE UNIQUE INDEXindexName ON mytable(username(length))

-- テーブル構造を変更します

ALTER mytable ADD UNIQUE [indexName] ON (username(length) )

- - 直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );


3. 主キーインデックス

特別な一意null 値を許可しないインデックス。通常、主キー インデックスはテーブルの作成時に同時に作成されます:

コードは次のとおりです:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ) ;

もちろん、ALTER Order を使用することもできます。テーブルには主キーを 1 つだけ持つことができることに注意してください。

4. 複合インデックス

単一列インデックスと複合インデックスを明確に比較するには、テーブルに複数のフィールドを追加します:

コードは次のとおりです:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR (16) NOT NULL , city VARCHAR(50) NOT NULL, age INT NOT NULL ); MySQL の効率をさらに引き出すには、結合インデックスの確立を検討する必要があります。名前、都市、年齢をインデックスに構築するだけです:

コードは次のとおりです:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);[code]

テーブルを作成するとき、ユーザー名は 16 です。ここでは 10 を使用します。これは、一般に名前の長さが 10 を超えないためです。これにより、インデックス クエリが高速化され、インデックス ファイルのサイズが削減され、INSERT の更新速度が向上します。

テーブルに 3 つの単一列インデックスがあるように、ユーザー名、都市、年齢にそれぞれ単一列インデックスを作成すると、クエリ効率は上記の結合インデックスとは大きく異なり、結合インデックスよりもはるかに低くなります。 。現時点では 3 つのインデックスがありますが、MySQL は最も効率的であると思われる単一列インデックスのみを使用できます。

このような結合インデックスを確立することは、実際には、次の 3 セットの結合インデックスを確立することと同じです:

usernname,city,age usernname,city usernname 都市と年齢のような組み合わせインデックスがないのはなぜですか?これは、MySQL 複合インデックスの「左端のプレフィックス」の結果です。簡単に理解すると、組み合わせは左端から開始するだけです。これら 3 つの列を含むクエリだけでなく、次の SQL もこの結合インデックスを使用します:
[code]
SELECT * FROM mytable WHREE username="admin" AND city="Zhengzhou" SELECT * FROM mytable WHREE username ="admin"

次のものは使用されません:

コードは次のとおりです:
SELECT * FROM mytable WHREE age=20 AND city="鄭州" SELECT * FROM mytable WHREE city=" 鄭州 "

5. インデックスの作成方法

これまでインデックスの作成方法を学習しましたが、どのような状況でインデックスを作成する必要があるのでしょうか?一般に、WHERE および JOIN に出現するカラムにはインデックスを付ける必要がありますが、MySQL では <、<=、=、>、>=、BETWEEN、IN のインデックスのみが使用され、場合によっては LIKE でインデックスが使用されるため、これが完全に当てはまるわけではありません。索引。例:

コードは次のとおりです:

SELECT t.Name FROM mytable t LEFT JOIN mytable m ON t.Name=m.username WHERE m.age=20 AND m.city='鄭州'

これでmytable テーブルの userame も JOIN 句に出現するため、これもインデックスする必要があります。

インデックスを作成する必要があるのは特定の LIKE のみであると先ほど述べました。 MySQL はワイルドカード文字 % と _ で始まるクエリを作成するときにインデックスを使用しないためです。たとえば、次の文はインデックスを使用します:

コードは次のとおりです:
SELECT * FROM mytable WHERE username like'admin%'
次の文はインデックスを使用しません:

コードは次のとおりです:

SELECT * FROM mytable WHEREt Name like'%admin'

したがって、LIKE を使用するときは、上記の違いに注意する必要があります。

6. インデックスの欠点

インデックスを使用する利点はすべて上で述べましたが、インデックスを過度に使用すると悪用が発生します。したがって、インデックスには欠点もあります:

1. インデックスはクエリ速度を大幅に向上させますが、テーブルの INSERT、UPDATE、DELETE などのテーブルの更新速度も低下します。テーブルを更新するとき、MySQL はデータを保存するだけでなく、インデックス ファイルも保存する必要があるためです。

2. インデックスファイルを作成すると、ディスクスペースが占有されます。通常、この問題は深刻ではありませんが、大きなテーブルに複数の結合インデックスを作成すると、インデックス ファイルが急速に拡張します。

MySQL に大規模なデータ テーブルがある場合、インデックスは効率を向上させるための 1 つの要素にすぎません。最適なインデックスを構築したりクエリ ステートメントを最適化するために時間を費やす必要があります。

7. インデックスを使用する際の注意事項:

インデックスを使用する場合、いくつかのヒントと注意事項があります:

1. インデックスには NULL 値が含まれる列は含まれません

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

2. 文字列のインデックス付けには短いインデックス

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

3. インデックス列のソート

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

4. like ステートメントの操作

一般に、like 操作の使用は推奨されません。使用する必要がある場合は、その使用方法も問題になります。 「%aaa%」のようにインデックスは使用されませんが、「aaa%」のようにインデックスが使用されます。

5. 列に対して操作を実行しないでください。

コードは次のとおりです:
select * from users where YEAR(adddate)<2007;

は各行に対して操作を実行します。これにより、インデックスが失敗し、テーブルがいっぱいになります。 scan なので、次のように変更できます:

コードは次のとおりです:

select * from users where adddate<'2007-01-01';

6 NOT IN および <> 操作は使用しないでください。

上記では、MySQL インデックス タイプを紹介します。お役に立てれば幸いです。

2 つのインデックス作成方法:

B ツリー インデックス

注: 広い観点から見ると、これらはすべてバランス ツリーを使用しますが、具体的な実装に関しては、各ストレージ エンジンが若干異なります。たとえば、厳密に言えば、NDB エンジンは T ツリー

Myisam を使用します。innodb では、B ツリーの理論的なクエリ時間の計算量は O(log2 (N-1)) です。 , N データテーブル内の行数です

ハッシュインデックス

メモリストレージエンジンを使用するテーブルの場合、デフォルトはハッシュインデックスです。ハッシュの理論的なクエリ時間計算量はO(1)です

関連する推奨事項:

mysqlインデックス作成の使い方とメリット・デメリットを徹底解説

ページ 1/2 のインデックス作成の長所と短所

以上がmysqlデータベースのインデックスにはどのような種類がありますか?設置方法とメリット・デメリットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

mysql インデックス障害のいくつかの状況 mysql インデックス障害のいくつかの状況 Feb 21, 2024 pm 04:23 PM

一般的な状況: 1. 関数または演算を使用する; 2. 暗黙的な型変換; 3. 等しくない (!= または <>) を使用する; 4. LIKE 演算子を使用し、ワイルドカードで始める; 5. OR 条件; 6. NULL値、7. 低いインデックス選択性、8. 複合インデックスの左端の接頭辞の原則、9. オプティマイザーの決定、10. FORCE INDEX および IGNORE INDEX。

どのような状況で mysql インデックスが失敗しますか? どのような状況で mysql インデックスが失敗しますか? Aug 09, 2023 pm 03:38 PM

MySQL インデックスは、インデックス カラムを使用せずにクエリを実行した場合、データ型が一致していない場合、プレフィックス インデックスが不適切に使用された場合、クエリに関数や式を使用した場合、インデックス カラムの順序が正しくない場合、データ更新が頻繁に行われる場合、インデックスが多すぎるか少なすぎる場合に失敗します。 1. クエリにはインデックス列を使用しないでください。この状況を回避するには、クエリで適切なインデックス列を使用する必要があります。2. データ型が一致しません。テーブル構造を設計するときは、インデックス列がクエリの構造と一致していることを確認する必要があります。クエリのデータ型; 3. 、プレフィックス インデックスの不適切な使用、プレフィックス インデックスを使用できます。

MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? Apr 09, 2025 am 12:05 AM

完全なテーブルスキャンは、MySQLでインデックスを使用するよりも速い場合があります。特定のケースには以下が含まれます。1)データボリュームは小さい。 2)クエリが大量のデータを返すとき。 3)インデックス列が高度に選択的でない場合。 4)複雑なクエリの場合。クエリプランを分析し、インデックスを最適化し、オーバーインデックスを回避し、テーブルを定期的にメンテナンスすることにより、実際のアプリケーションで最良の選択をすることができます。

mysqlインデックスの分類は何ですか? mysqlインデックスの分類は何ですか? Apr 22, 2024 pm 07:12 PM

MySQL インデックスは次のタイプに分類されます: 1. 通常のインデックス: 値、範囲、またはプレフィックスに一致します。 2. 固有のインデックス: 値が一意であることを確認します。 3. 主キー インデックス: 主キー列の一意のインデックス。キー インデックス: 別のテーブルの主キーを指します。 5. フルテキスト インデックス: 全文検索。 7. 空間インデックス: 地理空間検索。列。

MySQL インデックスの左プレフィックス マッチング ルール MySQL インデックスの左プレフィックス マッチング ルール Feb 24, 2024 am 10:42 AM

MySQL インデックスの左端の原則とコード例 MySQL では、インデックス作成はクエリ効率を向上させる重要な手段の 1 つです。その中でも、インデックスの左端の原則は、インデックスを使用してクエリを最適化するときに従う必要がある重要な原則です。この記事では、MySQL インデックスの左端の原則を紹介し、具体的なコード例をいくつか示します。 1. インデクス左端原則の原則 インデクス左端原則とは、インデクスにおいて問合せ条件が複数の列で構成される場合、問合せ条件を完全に満たすにはインデクスの左端の列のみを問合せできることを意味します。

さまざまなタイプのMySQLインデックス(Bツリー、ハッシュ、フルテキスト、空間)を説明します。 さまざまなタイプのMySQLインデックス(Bツリー、ハッシュ、フルテキスト、空間)を説明します。 Apr 02, 2025 pm 07:05 PM

MySQLは、Bツリー、ハッシュ、フルテキスト、および空間の4つのインデックスタイプをサポートしています。 1.B-Treeインデックスは、等しい値検索、範囲クエリ、ソートに適しています。 2。ハッシュインデックスは、等しい値検索に適していますが、範囲のクエリとソートをサポートしていません。 3.フルテキストインデックスは、フルテキスト検索に使用され、大量のテキストデータの処理に適しています。 4.空間インデックスは、地理空間データクエリに使用され、GISアプリケーションに適しています。

MySQL インデックスを合理的に使用し、データベースのパフォーマンスを最適化するにはどうすればよいでしょうか?技術系の学生が知っておくべき設計プロトコル! MySQL インデックスを合理的に使用し、データベースのパフォーマンスを最適化するにはどうすればよいでしょうか?技術系の学生が知っておくべき設計プロトコル! Sep 10, 2023 pm 03:16 PM

MySQL インデックスを合理的に使用し、データベースのパフォーマンスを最適化するにはどうすればよいでしょうか?技術系の学生が知っておくべき設計プロトコル!はじめに: 今日のインターネット時代では、データ量は増加し続けており、データベースのパフォーマンスの最適化が非常に重要なテーマになっています。最も人気のあるリレーショナル データベースの 1 つである MySQL では、データベースのパフォーマンスを向上させるためにインデックスを合理的に使用することが重要です。この記事では、MySQL インデックスを合理的に使用し、データベースのパフォーマンスを最適化し、技術系の学生向けにいくつかの設計ルールを提供する方法を紹介します。 1. なぜインデックスを使用するのでしょうか?インデックスは、以下を使用するデータ構造です。

PHP および MySQL インデックスのデータ更新とインデックス保守のためのパフォーマンス最適化戦略と、それらがパフォーマンスに及ぼす影響 PHP および MySQL インデックスのデータ更新とインデックス保守のためのパフォーマンス最適化戦略と、それらがパフォーマンスに及ぼす影響 Oct 15, 2023 pm 12:15 PM

PHP および MySQL インデックスのデータ更新とインデックス保守のためのパフォーマンス最適化戦略と、それらがパフォーマンスに与える影響 概要: PHP および MySQL の開発において、インデックスはデータベース クエリのパフォーマンスを最適化するための重要なツールです。この記事では、インデックスの基本原則と使用法を紹介し、データの更新とメンテナンスに対するインデックスのパフォーマンスへの影響を検討します。同時に、この記事では、開発者がインデックスをよりよく理解して適用できるように、いくつかのパフォーマンス最適化戦略と具体的なコード例も提供します。インデックスの基本原則と使用法 MySQL では、インデックスは特別な番号です。

See all articles