MySQL支持的四种索引_Mysql常见四种索引的使用
提到mysql優化,索引優化是必不可少的。其中一種優化方式 ——索引優化,添加合適的索引能夠讓項目的并發能力和抗壓能力得到明顯的提升。
我們知道項目性能的瓶頸主要是在"查(select)"語句,要提升"查"這一性能,mysql索引是必不可少的。接下來總結一下mysql常見的四種索引
一. 四種索引(主鍵索引/普通索引/全文索引/唯一索引)
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 索引名(column1,column2);
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:這個值越高,說明查詢低效。
總結
以上是生活随笔為你收集整理的MySQL支持的四种索引_Mysql常见四种索引的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Excel VBA使用总结
- 下一篇: swing和MySQL登录注册_Java