#インデックスとは何ですか?
インデックスとは、データを効率的に取得するためのデータ構造です。インデックスのタイプ
FULLTEXT、(HASH、BTREE[mysql で使用される 2 つの主要なタイプ])、RTREE。 1. FULLTEXT はフルテキスト インデックスで、現在 MyISAM エンジンでのみサポートされています。これは CREATE TABLE、ALTER TABLE、および CREATE INDEX で使用できますが、現時点では CHAR、VARCHAR、および TEXT 列にフルテキスト インデックスのみを作成できます。 全文インデックスは MyISAM とともに誕生したものではなく、WHERE name LIKE "%word%" のようなテキストに対するあいまいクエリの効率が悪いという問題を解決するために登場しました。 (無料の学習ビデオ チュートリアルの推奨:mysql ビデオ チュートリアル)
2. HASH HASH の一意性 (ほぼ 100% 一意) および類似のキーのため値 正しい形式はインデックスとしての使用に適しています。
通常のインデックス: クエリのみを高速化します
ユニーク インデックス: 一意の列値 (null を含めることもできます) を使用してクエリを高速化します
主キーインデックス: Accelerate クエリの列値は一意です (null は不可) テーブルには 1 つだけあります
複合インデックス: 複数の列値がインデックスを形成し、特に複合検索に使用され、その効率が向上しますはインデックスの結合より大きいです
全文インデックス: テキスト コンテンツをセグメント化して検索します。
インデックスの使用1. インデックスを作成します
1 --创建普通索引CREATE INDEX index_name ON table_name(col_name); 2 --创建唯一索引CREATE UNIQUE INDEX index_name ON table_name(col_name); 3 --创建普通组合索引CREATE INDEX index_name ON table_name(col_name_1,col_name_2); 4 --创建唯一组合索引CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2);
2. テーブルの変更による構造作成インデックス
ALTER TABLE table_name ADD INDEX index_name(col_name);
3. テーブル作成時にインデックスを直接指定
CREATE TABLE table_name ( ID INT NOT NULL,col_name VARCHAR (16) NOT NULL,INDEX index_name (col_name) );
--直接删除索引DROP INDEX index_name ON table_name; --修改表结构删除索引ALTER TABLE table_name DROP INDEX index_name;
- 查看表结构 desc table_name; - 查看生成表的SQL show create table table_name; - 查看索引 show index from table_name; - 查看执行时间 set profiling = 1; SQL... show profiles;
1. 完全な値の一致。これはインデックスが使用されていないことと同等です。 。
2. 最適なプレフィックス ルールを満たさない場合も、インデックス障害が発生する可能性があります。
3. インデックスに対して何か (計算、関数、(自動または手動) 型変換) を実行すると、インデックスが失敗し、テーブル全体のスキャンが行われます。
4. MySQL は、等しくない (<>, !=) を使用するとインデックスを使用できないため、テーブル全体がスキャンされます。
5. インデックスが null または null でない場合でも使用できません。
6. ('�c') のようなワイルドカード スイッチを使用すると、インデックスの失敗とテーブル全体のスキャンが発生します。
7. 文字列インデックスが一重引用符で囲まれていない場合、インデックスは無効になります。
8. 以下を使用します。またはを使用して接続すると、インデックスが失敗します。
9. select * クエリを使用し、カバリング インデックスを使用してみます。
mysql インデックスの仕様1. 【必須】ビジネスにおいて固有の特性を持つフィールドは、複数のフィールドの組み合わせであっても、固有のインデックスを構築する必要があります。 (注: 一意のインデックスが挿入速度に影響するとは考えないでください。この速度低下は無視できます (
)。ただし、検索速度の向上は明らかです。さらに、非常に完全な検証制御が行われたとしても(アプリケーション層では、一意のインデックスがない限り、マーフィーの法則に従って、ダーティ データが生成されなければなりません。)
2. [必須] 3 つ以上のテーブルの結合は禁止されています。結合する必要があるフィールドのデータ型は完全に一貫している必要があり、複数のテーブルに関連するクエリを実行する場合は、関連するフィールドにインデックスが必要であることが保証されます。
(注: 二重テーブルを結合する場合でも、テーブルのインデックスと SQL パフォーマンスに注意する必要があります。)
3. [必須] テーブルにインデックスを作成する場合varchar フィールドの場合は、インデックスの長さを指定する必要があります。フィールド全体にインデックスを付ける必要はなく、実際のテキストの区別に基づいてインデックスの長さを決定するだけです。
(注: インデックスの長さと識別は矛盾しています。一般に、文字列型データの場合、長さ 20 のインデックスの識別は 90% 以上になります。
count(distinct left(column name,index length))/count(*) の区別を使用して決定できます。)
4. [必須] ページ内では左ファジーまたはフルファジーは固く禁止されています。必要に応じて検索エンジンに解決させてください。
(注: インデックス ファイルには B-Tree の左端のプレフィックス マッチング機能があります。左端の値が決まらない場合、このインデックスは使用できません。)
推奨される関連記事チュートリアル:
mysql チュートリアル以上がmysqlインデックスの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。