MySQL支持的四种索引_Mysql常见四种索引的使用
提到mysql優(yōu)化,索引優(yōu)化是必不可少的。其中一種優(yōu)化方式 ——索引優(yōu)化,添加合適的索引能夠讓項(xiàng)目的并發(fā)能力和抗壓能力得到明顯的提升。
我們知道項(xiàng)目性能的瓶頸主要是在"查(select)"語(yǔ)句,要提升"查"這一性能,mysql索引是必不可少的。接下來總結(jié)一下mysql常見的四種索引
一. 四種索引(主鍵索引/普通索引/全文索引/唯一索引)
1.索引的添加
1.1主鍵索引的添加
當(dāng)一張表,把某個(gè)列設(shè)為主鍵的時(shí)候,則該列就是主鍵索引
create?table?a(
id?int?primary?key?auto_increment,
name?varchar(20)?not?null?default?''
);
//這里id就是表的主鍵
如果當(dāng)創(chuàng)建表時(shí)沒有指定主鍵索引,也可以在創(chuàng)建表之后添加:
alter table table_name add primary key (column name);
1.2普通索引
普通索引一般是在建表后再添加的,
create index 索引名 on table_name(column1,column2);
alter table table_name add index 索引名(column1,column2);
1.3全文索引
首先,全文索引主要針對(duì)文本文件,比如文章,標(biāo)題,全文索引只有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?...');
使用全文索引常見的錯(cuò)誤:
select * from c where content like "%mysql%";
這里并不會(huì)使用全文索引,可以用explain進(jìn)行查看。正確用法:
select * ?from c where match(title,content) against ('MYSQL');
備注:
1. ?在mysql中fulltext 索引只針對(duì) myisam生效
2. ?mysql自己提供的fulltext針對(duì)英文生效->sphinx(coreseek)技術(shù)處理中文
3. ?使用方法是 match(字段名..) against(‘關(guān)鍵字’)
1.4唯一索引
create?table?d(id?int?primary?key?auto_increment?,?name?varchar(32)?unique)
d表中name就是唯一索引,唯一索引可以有多個(gè)null,不能是重復(fù)的內(nèi)容
相比主鍵索引,主鍵字段不能為null,也不能重復(fù)
2. 查詢索引
show indexes from table_name;
show keys from table_name;
3.刪除索引
alter table table_name drop index 索引名;
二. 索引的機(jī)制
2.1 為什么我們添加完索引后查詢速度為變快?
傳統(tǒng)的查詢方法,是按照表的順序遍歷的,不論查詢幾條數(shù)據(jù),mysql需要將表的數(shù)據(jù)從頭到尾遍歷一遍
在我們添加完索引之后,mysql一般通過BTREE算法生成一個(gè)索引文件,在查詢數(shù)據(jù)庫(kù)時(shí),找到索引文件進(jìn)行遍歷(折半查找大幅查詢效率),找到相應(yīng)的鍵從而獲取數(shù)據(jù)
2.2 索引的代價(jià)
1. 創(chuàng)建索引是為產(chǎn)生索引文件的,占用磁盤空間
2. 索引文件是一個(gè)二叉樹類型的文件,可想而知我們的dml操作同樣也會(huì)對(duì)索引文件進(jìn)行修改,所以性能會(huì)下降
2.3 在哪些column上使用索引?
1 .較頻繁的作為查詢條件字段應(yīng)該創(chuàng)建索引
2. 唯一性太差的字段不適合創(chuàng)建索引,盡管頻繁作為查詢條件,例如gender性別字段
3. 更新非常頻繁的字段不適合作為索引
4.不會(huì)出現(xiàn)在where子句中的字段不該創(chuàng)建索引
總結(jié): 滿足以下條件的字段,才應(yīng)該創(chuàng)建索引.
a: 肯定在where條經(jīng)常使用 b: 該字段的內(nèi)容不是唯一的幾個(gè)值 c: 字段內(nèi)容不是頻繁變化
三.索引使用注意事項(xiàng)
1.對(duì)于創(chuàng)建的多列索引,只要查詢條件使用了最左邊的列,索引一般就會(huì)被使用。
比如我們對(duì)title,content 添加了復(fù)合索引
select * from table_name where title = 'test';會(huì)用到索引
select * from table_name where content = 'test';不會(huì)用到索引
2.對(duì)于使用like的查詢,查詢?nèi)绻?‘%a’不會(huì)使用到索引?,而 like 'a%'就會(huì)用到索引。最前面不能使用%和_這樣的變化值
3.如果條件中有or,即使其中有條件帶索引也不會(huì)使用。
4.如果列類型是字符串,那一定要在條件中將數(shù)據(jù)使用引號(hào)引用起來。
四.如何查看索引使用的情況:
show status like‘Handler_read%’;
注意:
handler_read_key:這個(gè)值越高越好,越高表示使用索引查詢到的次數(shù)。
handler_read_rnd_next:這個(gè)值越高,說明查詢低效。
總結(jié)
以上是生活随笔為你收集整理的MySQL支持的四种索引_Mysql常见四种索引的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel VBA使用总结
- 下一篇: swing和MySQL登录注册_Java