Mysqlの一般的な4つのインデックスの使用

3751 ワード

mysql最適化といえば、インデックス最適化は欠かせません.1つの最適化方法は、インデックス最適化であり、適切なインデックスを追加することで、プロジェクトの同時能力と耐圧能力を明らかに向上させることができます.
プロジェクトのパフォーマンスのボトルネックは主に「検索(select)」文であることを知っています.「検索」というパフォーマンスを向上させるには、mysqlインデックスが欠かせません.次にmysqlでよく見られる4つのインデックスをまとめます
一.4つのインデックス(プライマリ・キー・インデックス/一般インデックス/全文インデックス/一意インデックス)
1.インデックスの追加
1.1プライマリ・キー索引の追加
1つのテーブルで、あるカラムをプライマリ・キーとすると、そのカラムがプライマリ・キー・インデックスになります.
create table a(
id int primary key auto_increment,
name varchar(20) not null default ''
);
//  id      

テーブルの作成時にプライマリ・キー・インデックスが指定されていない場合は、テーブルの作成後に追加することもできます.
alter table table_name add primary key (column name);
1.2一般索引
通常のインデックスは一般的にテーブルを作成した後に追加されます.create indexインデックス名on table_name(column1,column2);
alter table table_name add indexインデックス名(column 1,column 2);
 
   
  

1.3全文索引

首先,全文索引主要针对文本文件,比如文章,标题,全文索引只有MyISAM有效(mysql5.6之后InnoDB也支持了全文索引)

create table c(
id int primary key auto_increment ,
title varchar(20),
content text,
fulltext(title,content)
)engine=myisam charset utf8;

insert into c(title,content) values
    ('MySQL Tutorial','DBMS stands for DataBase ...'),
    ('How To Use MySQL Well','After you went through a ...'),
    ('Optimizing MySQL','In this tutorial we will show ...'),
    ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
    ('MySQL vs. YourSQL','In the following database comparison ...'),
    ('MySQL Security','When configured properly, MySQL ...');

全文索引を使用してよくあるエラー:
select * from c where content like "%mysql%"; ここでは全文インデックスは使用されず、explainで表示できます.正しい使い方:
select *  from c where match(title,content) against ('MYSQL');
コメント:
1.mysqlでfulltextインデックスはmyisamのみで有効
2.mysql自身が提供するfulltextは英語に対して有効->sphinx(coreseek)技術処理中国語
3.使用方法はmatch(フィールド名.)Against(‘キーワード’)
1.4一意のインデックス
create table d(id int primary key auto_increment , name varchar(32) unique)
dテーブルのnameは一意のインデックスであり、一意のインデックスには複数のnullがあり、重複するコンテンツではありません.
プライマリ・キー・インデックスと比較して、プライマリ・キー・フィールドはnullではなく、繰り返しではありません.
2.クエリー索引
show indexes from table_name;
show keys from table_name;
3.索引の削除
alter table table_name drop indexインデックス名;
二.インデックスのメカニズム
2.1インデックスを追加すると、クエリの速度が速くなるのはなぜですか?
従来のクエリー・メソッドは、テーブルの順序で遍歴されています.mysqlは、いくつかのデータをクエリーしても、テーブルのデータを最初から最後まで遍歴する必要があります.
インデックスを追加した後、mysqlは一般的にBTREEアルゴリズムによってインデックスファイルを生成し、データベースをクエリーするときにインデックスファイルを見つけて遍歴(半分を折って大幅なクエリー効率を検索)し、対応するキーを見つけてデータを取得します.
2.2インデックスの対価
1.インデックスの作成は、インデックスファイルを生成するためのディスク領域の使用
2.インデックス・ファイルはツリー・タイプのファイルです.dml操作でもインデックス・ファイルが変更されるため、パフォーマンスが低下することが予想されます.
2.3インデックスを使用するcolumnはどれですか?
1 .クエリー条件フィールドとして頻繁にインデックスを作成する必要があります
2.一意性が悪すぎるフィールドは、gender性別フィールドなどのクエリー条件として頻繁に使用されるにもかかわらず、インデックスの作成には適していません.
3.頻繁に更新されるフィールドはインデックスとして使用できません
4.where句に表示されないフィールドはインデックスを作成しない
要約:インデックスを作成するには、次の条件を満たすフィールドを使用します.
a:whereバーでよく使われるb:このフィールドの内容は唯一の値ではないc:フィールドの内容は頻繁に変化していない
三.インデックス使用上の注意
1.作成された複数のカラムのインデックスについて、クエリ条件が一番左のカラムを使用している限り、インデックスは一般的に使用されます.
例えばtitle、contentに複合インデックスを追加しました
select * from table_name where title = 'test';インデックスが使用されます
select * from table_name where content = 'test';インデックスは使用されません
2.likeを使用するクエリの場合、クエリが'%a'であればインデックスは使用されず、like'a%'ではインデックスが使用されます.一番前に%と_は使用できません.このような変化値
3.条件にorがある場合、条件付きインデックスがある場合でも使用されません.
4.列タイプが文字列の場合は、条件でデータを引用符で参照する必要があります.
四.インデックスの使用状況を表示する方法:
show status like‘Handler_read%’;
注意:
handler_read_key:この値が高ければ高いほど、インデックスを使用してクエリーされた回数を表します.
handler_read_rnd_next:この値が高いほど、クエリが非効率であることを示します.