日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

MySQL支持的四种索引_Mysql常见四种索引的使用

發(fā)布時(shí)間:2023/12/10 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL支持的四种索引_Mysql常见四种索引的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

提到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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。