データベースのパフォーマンスを向上させるために、インデックスは安価なものです。正しいcreateindexが実行されている限り、メモリを追加したり、プログラムを変更したり、sqlを調整したりする必要はありません。クエリの速度は、何百倍も向上する可能性があります。しかし、世界には無料の昼食はありません。クエリ速度の向上には、挿入、更新、削除の速度が犠牲になります。これらの書き込み操作により、多くのIOが増加します。したがって、その価値は、大量のデータの取得速度を向上させることにあります。
一般的なインデックスは次のように分類されます。
- 主キーインデックス(主キー)
- 一意のインデックス(一意)
- 通常のインデックス(インデックス)
- フルテキストインデックス(フルテキスト)-ニュートロンテキストインデックスの問題を解決します。
1.インデックスの原則:
インデックスの説明:
- インデックスはディスクスペースを占有します。
- レコードを追加するとき、テーブルに追加するだけでなく、バイナリツリーを維持するためにも、速度は影響しますが、それほどではありません。
- インデックスを追加する場合、すべてのクエリの問題を解決できるわけではなく、フィールドに個別にインデックスを付ける必要があります。
- インデックスは時間のスペースに基づいています。
2.インデックスの作成
1.プライマリキーインデックス
1)テーブルを作成するときは、フィールド名の直後にプライマリキーを指定します。
create table user1(id int primary key, name varchar(30));
2)テーブルの作成の最後に、1つまたは複数の列をプライマリキーインデックスとして指定します
create table user2(id int, name varchar(30), primary key(id));
create table user3(id int, name varchar(30));
创建表以后再添加主键
alter table user3 add primary key(id);
主キーインデックスの特性:
- テーブルには、最大で1つのプライマリキーインデックスがあります。もちろん、プライマリキーとの整合性を保つことができます。
- 主キーインデックスの効率が高い(主キーを繰り返すことはできません)
- 主キーインデックスの列を作成します。その値をnullにすることはできず、繰り返すこともできません。
- 主キーインデックスの列は基本的にintです
2.一意のキーインデックス
1)テーブルを定義するときに、特定の列の直後に一意の属性を指定します。
create table user4(id int primary key, name varchar(30) unique);
2)テーブルを作成するときは、テーブルの後に1つまたは複数の列を一意として指定します
create table user5(id int primary key, name varchar(30), unique(name));
3)
create table user6(id int primary key, name varchar(30));
alter table user6 add unique(name);
独自のインデックスの特徴:
- テーブルには複数の一意のインデックスが存在する可能性があります
- 高いクエリ効率
- 列に一意のインデックスを作成する場合は、この列に重複データが含まれないようにする必要があります
- 一意のインデックスにnullが指定されていない場合は、プライマリキーインデックスと同等です。
3、通常のインデックス作成
1)
create table user8(id int primary key,
name varchar(20), email varchar(30),
index(name) --在表的定义最后,指定某列为索引
);
2)
create table user9(id int primary key, name varchar(20), email varchar(30));
alter table user9 add index(name); --创建完表以后指定某列为普通索引
3)
create table user10(id int primary key, name varchar(20), email varchar(30));
-- 创建一个索引名为 idx_name 的索引
create index idx_name on user10(name);
通常のインデックスの特徴:
- テーブルには複数の通常のインデックスが存在する可能性があり、実際の開発では通常のインデックスがより多く使用されます
- 列にインデックスを作成する必要があるが、列に重複する値がある場合は、通常のインデックスを使用する必要があります
4.フルテキストインデックス
記事フィールドまたはテキストの多いフィールドを検索する場合は、フルテキストインデックスが使用されます。MySQLはフルテキストのインデックス作成メカニズムを提供しますが、要件があります。テーブルのストレージエンジンはMyISAMである必要があり、デフォルトのフルテキストインデックスは中国語ではなく英語をサポートします。中国語での全文検索には、中国語版のSphinx(coreseek)を使用できます。
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
)engine=MyISAM;
3.インデックスのクエリ
1)テーブル名からのキーの表示;
2)テーブル名からのインデックスの表示;
3)(情報は省略)descテーブル名;
4.インデックスの削除
1)プライマリキーインデックスの削除:テーブルテーブル名の変更プライマリキーの削除;
2 )他のインデックスを削除します。テーブルテーブル名を変更します。インデックスインデックス名を削除します。インデックス名は、テーブル名からのキーの表示のKey_nameフィールドです。
mysql> alter table user10 drop index idx_name;
3)テーブル名にインデックスインデックス名を削除します
mysql> drop index name on user8;
5.インデックス作成の原則
- クエリ条件として頻繁に使用されるフィールドにはインデックスを付ける必要があります
- 一意性の低いフィールドは、クエリ条件として頻繁に使用される場合でも、インデックスを個別に作成するのには適していません。
- 頻繁に更新されるフィールドは、インデックスの作成には適していません
- where句に表示されないフィールドにはインデックスを付けないでください