MySQL索引的類型

B-Tree(平衡多路查找樹)

1.相關(guān)概念

索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。索引的本質(zhì):索引是數(shù)據(jù)結(jié)構(gòu)。

2.普通索引

這是最基本的索引,它沒有任何限制,比如上文中為title字段創(chuàng)建的索引就是一個(gè)普通索引,MyIASM中默認(rèn)的BTREE類型的索引,也是我們大多數(shù)情況下用到的索引。

–直接創(chuàng)建索引

CREATE?INDEX?index_name?ON?table(column(length))

–修改表結(jié)構(gòu)的方式添加索引

ALTER?TABLE?table_name?ADD?INDEX?index_name?ON?(column(length))

–刪除索引

DROP?INDEX?index_name?ON?table

3.唯一索引

與普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值(注意和主鍵不同)。如果是組合索引,則列值的組合必須唯一,創(chuàng)建方法和普通索引類似。

–創(chuàng)建唯一索引

CREATE?UNIQUE?INDEX?indexName?ON?table(column(length))

–修改表結(jié)構(gòu)

ALTER?TABLE?table_name?ADD?UNIQUE?indexName?ON?(column(length))

4.全文索引

MySQL從3.23.23版開始支持全文索引和全文檢索,FULLTEXT索引僅可用于 MyISAM 表;他們可以從CHAR、VARCHAR或TEXT列中作為CREATE TABLE語(yǔ)句的一部分被創(chuàng)建,或是隨后使用ALTER TABLE 或CREATE INDEX被添加。對(duì)于較大的數(shù)據(jù)集,將你的資料輸入一個(gè)沒有FULLTEXT索引的表中,然后創(chuàng)建索引,其速度比把資料輸入現(xiàn)有FULLTEXT索引的速度更為快。不過切記對(duì)于大容量的數(shù)據(jù)表,生成全文索引是一個(gè)非常消耗時(shí)間非常消耗硬盤空間的做法。

–直接創(chuàng)建索引

CREATE?FULLTEXT?INDEX?index_content?ON?article(content)

–修改表結(jié)構(gòu)添加全文索引

ALTER?TABLE?article?ADD?FULLTEXT index_content(content)

5.單列索引、多列索引

多個(gè)單列索引與單個(gè)多列索引的查詢效果不同,因?yàn)閳?zhí)行查詢時(shí),MySQL只能使用一個(gè)索引,會(huì)從多個(gè)索引中選擇一個(gè)限制最為嚴(yán)格的索引。

6.組合索引(最左前綴)

用戶可以在多個(gè)列上建立索引,這種索引叫做復(fù)合索引(組合索引); 復(fù)合索引在數(shù)據(jù)庫(kù)操作期間所需的開銷更小,可以代替多個(gè)單一索引; 同時(shí)有兩個(gè)概念叫做窄索引和寬索引,窄索引是指索引列為1-2列的索引,寬索引也就是索引列超過2列的索引; 設(shè)計(jì)索引的一個(gè)重要原則就是能用窄索引不用寬索引,因?yàn)檎饕冉M合索引更有效;

7.MySQL索引失效的場(chǎng)景

1.數(shù)據(jù)類型是varchar,查詢時(shí)沒有使用引號(hào)括起時(shí)不會(huì)使用索引,此時(shí)索引失效

2.使用like時(shí)通配符在前:like '%xxxx'

3.在查詢條件中使用OR

4.對(duì)索引列進(jìn)行函數(shù)運(yùn)算

5.聯(lián)合索引ABC問題:Mysql從左到右的使用索引中的字段,一個(gè)查詢可以只使用索引中的一部份,但只能是最左側(cè)部分

6.使用索引中范圍條件右邊的列,范圍之后索引失效:< ,> between and

7.mysql使用不等于(!= 或者<>)的時(shí)候,無法使用索引,會(huì)導(dǎo)致索引失效

8.mysql中使用is not null 或者 is null會(huì)導(dǎo)致無法使用索引

9.如果mysql使用全表掃描要比使用索引快,則不會(huì)使用到索引

8.MySQL創(chuàng)建索引的原則

1、 對(duì)于查詢頻率高的字段創(chuàng)建索引;

2、 對(duì)排序、分組、聯(lián)合查詢頻率高的字段創(chuàng)建索引;

3、 索引的數(shù)目不宜太多

? ? ? 原因:a、每創(chuàng)建一個(gè)索引都會(huì)占用相應(yīng)的物理控件;

  ? ? ? ? ? b、過多的索引會(huì)導(dǎo)致insert、update、delete語(yǔ)句的執(zhí)行效率降低;

4、若在實(shí)際中,需要將多個(gè)列設(shè)置索引時(shí),可以采用多列索引

5、選擇唯一性索引

? ? ? ? 唯一性索引的值是唯一的,可以更快速的通過該索引來確定某條記錄。例如,學(xué)生表中學(xué)號(hào)是具有唯一性的字段。為該字段建立唯一性索引可以很快的確定某個(gè)學(xué)生的信息。如果使用姓名的話,可能存在同名現(xiàn)象,從而降低查詢速度。

6、盡量使用數(shù)據(jù)量少的索引

? ? ? 如果索引的值很長(zhǎng),那么查詢的速度會(huì)受到影響。例如,對(duì)一個(gè)CHAR(100)類型的字段進(jìn)行全文檢索需要的時(shí)間肯定要比對(duì)CHAR(10)類型的字段需要的時(shí)間要多。

7、盡量使用前綴來索引

? ? 如果索引字段的值很長(zhǎng),最好使用值的前綴來索引。例如,TEXT和BLOG類型的字段,進(jìn)行全文檢索會(huì)很浪費(fèi)時(shí)間。如果只檢索字段的前面的若干個(gè)字符,這樣可以提高檢索速度。

8、刪除不再使用或者很少使用的索引.

表中的數(shù)據(jù)被大量更新,或者數(shù)據(jù)的使用方式被改變后,原有的一些索引可能不再需要。數(shù)據(jù)庫(kù)管理員應(yīng)當(dāng)定期找出這些索引,將它們刪除,從而減少索引對(duì)更新操作的影響


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、簡(jiǎn)介 Mysql主要的幾種索引類型: 普通索引 唯一索引 主鍵索引 綜合索引 全文索引 語(yǔ)句 1、unique...
    慕凌峰閱讀 1,267評(píng)論 0 3
  • 索引 數(shù)據(jù)庫(kù)中的查詢操作非常普遍,索引就是提升查找速度的一種手段 索引的類型 從數(shù)據(jù)結(jié)構(gòu)角度分 1.B+索引:傳統(tǒng)...
    一凡呀閱讀 3,217評(píng)論 0 8
  • 原文鏈接:blog.ouyangsihai.cn >> MySQL的B+樹索引的概念、使用、優(yōu)化及使用場(chǎng)景 在看這...
    程序員歐陽(yáng)閱讀 617評(píng)論 0 2
  • MySQL的事物、視圖、索引、備份和恢復(fù) 使用事物插入多條成績(jī)記錄 在使用數(shù)據(jù)庫(kù)時(shí),只要發(fā)生數(shù)據(jù)傳輸、數(shù)據(jù)存儲(chǔ)、數(shù)...
    劉玉鵬151閱讀 1,028評(píng)論 0 0
  • 《飛屋環(huán)游記》:幸福,是每一個(gè)微小的生活愿望達(dá)成,當(dāng)你想吃的時(shí)候有的吃,想被愛的時(shí)候有人來愛你。 《戀戀筆記本》:...
    酒色清淺S閱讀 220評(píng)論 0 1

友情鏈接更多精彩內(nèi)容