日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2023/12/10 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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常见四种索引的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。