MySQL回表的性能傷害程度有多大
1 回表的性能消耗
無(wú)論單列索引 還是 聯(lián)合索引,一個(gè)索引就對(duì)應(yīng)一個(gè)獨(dú)立的B+索引樹(shù),索引樹(shù)節(jié)點(diǎn)僅包含:
- 索引里的字段值
- 主鍵值
即使根據(jù)索引樹(shù)按條件找到所需數(shù)據(jù),也僅是索引里的幾個(gè)字段的值和主鍵值,萬(wàn)一你搞個(gè)select *,那就還得其他字段,就需回表,根據(jù)主鍵到聚簇索引里找,聚簇索引的葉節(jié)點(diǎn)是數(shù)據(jù)頁(yè),找到數(shù)據(jù)頁(yè)才能把一行數(shù)據(jù)所有字段值讀出來(lái)。
所以類(lèi)似
select * from table order by xx1,xx2,xx3
得從聯(lián)合索引的索引樹(shù)里按序取出所有數(shù)據(jù),接著對(duì)每條數(shù)據(jù)都走一個(gè)主鍵的聚簇索引查找,性能不高。
有時(shí)MySQL執(zhí)行引擎可能認(rèn)為,你要是類(lèi)似
select * from table order by xx1,xx2,xx3
相當(dāng)于得把聯(lián)合索引和聚簇索引,兩個(gè)索引的所有數(shù)據(jù)都掃描一遍,那還不如不走聯(lián)合索引,直接全表掃描得了,這樣就只需掃描一個(gè)主鍵索引。
但若形如:
select * from table order by xx1,xx2,xx3 limit 10
那執(zhí)行引擎就知道你先掃描聯(lián)合索引的索引樹(shù),拿到10條數(shù)據(jù),接著對(duì)10條數(shù)據(jù)在聚簇索引里查找10次即可,那就還是會(huì)走聯(lián)合索引。
2 覆蓋索引
覆蓋索引不是一種索引,只是一種基于索引查詢(xún)的方式,即針對(duì)類(lèi)似
select xx1,xx2,xx3 from table order by xx1,xx2,xx3
僅需聯(lián)合索引里的幾個(gè)字段的值,那就只需掃描聯(lián)合索引的索引樹(shù),無(wú)需回表找其它字段,這種查詢(xún)方式就是覆蓋索引。
所以當(dāng)你使用聯(lián)合索引時(shí),注意是否可能會(huì)導(dǎo)致大量回表到聚簇索引,若回表聚簇索引的次數(shù)太多,可能就直接給你做成全表掃描而不走聯(lián)合索引了。
盡可能還是在SQL里指定你僅需要的字段,而不要暴力select *,最好直接走覆蓋索引。
即使無(wú)可避免地要回表,你也盡可能用limit、 where限定一下回表的次數(shù),就從聯(lián)合索引里篩選少數(shù)數(shù)據(jù),再回表,這樣性能好一點(diǎn)。
到此這篇關(guān)于MySQL回表的性能傷害程度有多大的文章就介紹到這了,更多相關(guān)MySQL回表的性能傷害內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決MySQL數(shù)據(jù)庫(kù)意外崩潰導(dǎo)致表數(shù)據(jù)文件損壞無(wú)法啟動(dòng)的問(wèn)題
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)意外崩潰導(dǎo)致表數(shù)據(jù)文件損壞無(wú)法啟動(dòng)的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
全面解析MySQL常見(jiàn)問(wèn)題的排查與解決方法
MySQL 是一款常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),廣泛應(yīng)用于各類(lèi)應(yīng)用開(kāi)發(fā)和數(shù)據(jù)管理場(chǎng)景,然而,在實(shí)際使用中,MySQL 有時(shí)會(huì)遇到啟動(dòng)失敗、服務(wù)中斷或性能問(wèn)題等情況,所以本文給大家介紹了MySQL常見(jiàn)問(wèn)題的排查與解決方法,需要的朋友可以參考下2024-11-11
Mysql表創(chuàng)建外鍵報(bào)錯(cuò)解決方案
這篇文章主要介紹了Mysql表創(chuàng)建外鍵報(bào)錯(cuò)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Mysql 自定義隨機(jī)字符串的實(shí)現(xiàn)方法
前段時(shí)間接了一個(gè)項(xiàng)目,需要用到隨機(jī)字符串,但是mysql的庫(kù)函數(shù)沒(méi)有直接提供,需要我們自己實(shí)現(xiàn)此功能,下面小編給大家介紹下Mysql 自定義隨機(jī)字符串的實(shí)現(xiàn)方法,需要的朋友參考下吧2016-08-08
mysql 5.7.18 安裝配置方法圖文教程(CentOS7)
這篇文章主要為大家詳細(xì)介紹了CentOS 7下mysql 5.7.18 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04

