MySQL學(xué)習(xí)筆記-索引提高查詢速度

為什么索引能提高查詢速度

MySQL 的基本存儲(chǔ)結(jié)構(gòu)

MySQL的基本存儲(chǔ)結(jié)構(gòu)是頁(記錄都存在頁里邊):

image.png

image.png
  • 各個(gè)數(shù)據(jù)頁可以組成一個(gè)雙向鏈表
  • 每個(gè)數(shù)據(jù)頁中的記錄又可以組成一個(gè)單向鏈表
    • 每個(gè)數(shù)據(jù)頁都會(huì)為存儲(chǔ)在它里邊兒的記錄生成一個(gè)頁目錄汰蜘,在通過主鍵查找某條記錄的時(shí)候可以在頁目錄中使用二分法快速定位到對(duì)應(yīng)的槽,然后再遍歷該槽對(duì)應(yīng)分組中的記錄即可快速找到指定的記錄
    • 以其他列(非主鍵)作為搜索條件:只能從最小記錄開始依次遍歷單鏈表中的每條記錄宪彩。

所以說对竣,如果我們寫select * from user where indexname = 'xxx'這樣沒有進(jìn)行任何優(yōu)化的sql語句氏身,默認(rèn)會(huì)這樣做:

  1. 定位到記錄所在的頁:需要遍歷雙向鏈表床估,找到所在的頁
  2. 從所在的頁內(nèi)中查找相應(yīng)的記錄:由于不是根據(jù)主鍵查詢雇寇,只能遍歷所在頁的單鏈表了

很明顯,在數(shù)據(jù)量很大的情況下這樣查找會(huì)很慢虽另!這樣的時(shí)間復(fù)雜度為O(n)暂刘。

使用索引之后

索引做了些什么可以讓我們查詢加快速度呢?其實(shí)就是將無序的數(shù)據(jù)變成有序(相對(duì)):

image.png

要找到id為8的記錄簡(jiǎn)要步驟:

image.png

很明顯的是:沒有用索引我們是需要遍歷雙向鏈表來定位對(duì)應(yīng)的頁捂刺,現(xiàn)在通過 “目錄” 就可以很快地定位到對(duì)應(yīng)的頁上了Rゼ稹(二分查找,時(shí)間復(fù)雜度近似為O(logn))

其實(shí)底層結(jié)構(gòu)就是B+樹族展,B+樹作為樹的一種實(shí)現(xiàn)森缠,能夠讓我們很快地查找出對(duì)應(yīng)的記錄。

最左前綴原則

MySQL中的索引可以以一定順序引用多列仪缸,這種索引叫作聯(lián)合索引辅鲸。如User表的name和city加聯(lián)合索引就是(name,city)o而最左前綴原則指的是,如果查詢的時(shí)候查詢條件精確匹配索引的左邊連續(xù)一列或幾列腹殿,則此列就可以被用到。如下:

select * from user where name=xx and city=xx ; //可以命中索引
select * from user where name=xx ; // 可以命中索引
select * from user where city=xx; // 無法命中索引            

這里需要注意的是例书,查詢的時(shí)候如果兩個(gè)條件都用上了锣尉,但是順序不同,如 city= xx and name =xx决采,那么現(xiàn)在的查詢引擎會(huì)自動(dòng)優(yōu)化為匹配聯(lián)合索引的順序自沧,這樣是能夠命中索引的.

由于最左前綴原則,在創(chuàng)建聯(lián)合索引時(shí),索引字段的順序需要考慮字段值去重之后的個(gè)數(shù)拇厢,較多的放前面爱谁。ORDERBY子句也遵循此規(guī)則。

注意避免冗余索引

冗余索引指的是索引的功能相同孝偎,能夠命中 就肯定能命中 访敌,那么 就是冗余索引如(name,city )和(name )這兩個(gè)索引就是冗余索引,能夠命中后者的查詢肯定是能夠命中前者的 在大多數(shù)情況下衣盾,都應(yīng)該盡量擴(kuò)展已有的索引而不是創(chuàng)建新索引寺旺。

MySQLS.7 版本后,可以通過查詢 sys 庫的 schemal_r dundant_indexes 表來查看冗余索引

添加索引

1.添加PRIMARY KEY(主鍵索引)

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 

2.添加UNIQUE(唯一索引)

ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 

3.添加INDEX(普通索引)

ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引)

ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 

5.添加多列索引

ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

數(shù)據(jù)庫索引總結(jié):(點(diǎn)擊查看高清大圖)

數(shù)據(jù)庫索引總結(jié).png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末势决,一起剝皮案震驚了整個(gè)濱河市阻塑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌果复,老刑警劉巖陈莽,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異虽抄,居然都是意外死亡走搁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門极颓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朱盐,“玉大人,你說我怎么就攤上這事菠隆”眨” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵骇径,是天一觀的道長躯肌。 經(jīng)常有香客問我,道長破衔,這世上最難降的妖魔是什么清女? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮晰筛,結(jié)果婚禮上嫡丙,老公的妹妹穿的比我還像新娘。我一直安慰自己读第,他們只是感情好曙博,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怜瞒,像睡著了一般父泳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天惠窄,我揣著相機(jī)與錄音蒸眠,去河邊找鬼。 笑死杆融,一個(gè)胖子當(dāng)著我的面吹牛楞卡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播擒贸,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼臀晃,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了介劫?” 一聲冷哼從身側(cè)響起徽惋,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎座韵,沒想到半個(gè)月后险绘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡誉碴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年宦棺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黔帕。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡代咸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出成黄,到底是詐尸還是另有隱情呐芥,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布奋岁,位于F島的核電站思瘟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏闻伶。R本人自食惡果不足惜滨攻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蓝翰。 院中可真熱鬧光绕,春花似錦、人聲如沸畜份。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漂坏。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顶别,已是汗流浹背谷徙。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驯绎,地道東北人完慧。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像剩失,于是被迫代替她去往敵國和親屈尼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容