MySQL覆蓋索引與大分頁(yè)詳解

核心知識(shí)點(diǎn)
覆蓋索引概念
查詢使用了索引,且返回的列在該索引中能全部找到。
例如,對(duì)于主鍵索引(聚集索引),能一次性獲取整行記錄;對(duì)于普通索引,若返回列包含在該索引及主鍵值中,也算覆蓋索引,否則可能需要回表查詢。

覆蓋索引判斷方法
根據(jù)查詢條件所走的索引類型(聚集索引或二級(jí)索引),判斷返回列是否都在該索引中。如根據(jù)id查詢走聚集索引,返回所有列是覆蓋索引;根據(jù)name查詢走二級(jí)索引,若返回列只有id和name則是覆蓋索引,若包含未在該二級(jí)索引中的列(如gender)則不是覆蓋索引。
覆蓋索引性能優(yōu)勢(shì)
一次性查詢出所有數(shù)據(jù),相比回表查詢性能更高,所以在開發(fā)中應(yīng)盡量避免使用“select *”,防止因返回列未創(chuàng)建索引而觸發(fā)回表查詢。

覆蓋索引在MySQL超大分頁(yè)問題中的應(yīng)用

超大分頁(yè)問題
當(dāng)表數(shù)據(jù)量很大時(shí),使用limit進(jìn)行分頁(yè),越往后分頁(yè)效率越低。如查詢“limit 9000000, 10”,MySQL會(huì)排序前9000010條記錄,但僅取十條,900多萬條記錄的排序代價(jià)高導(dǎo)致性能低。
解決方法
使用覆蓋索引加子查詢優(yōu)化。先通過覆蓋索引分頁(yè)查詢獲取表中按id排序后的分頁(yè)id集合(操作id效率高,因id是覆蓋索引),再通過該id集合到原表做關(guān)聯(lián)查詢提升效率。

面試回答思路
- 覆蓋索引定義解釋:覆蓋索引指查詢使用索引且返回列都在索引中能找到,如根據(jù)id查詢走聚集索引可一次獲取所有數(shù)據(jù)。
- 開發(fā)中的注意事項(xiàng):避免使用“select *”,防止因返回列未建索引觸發(fā)回表查詢影響性能。
- 超大分頁(yè)問題闡述:說明表數(shù)據(jù)量大時(shí)用limit分頁(yè),越往后效率越低,如“limit 9000000, 10”的查詢,MySQL會(huì)排序大量記錄但僅取少量,導(dǎo)致性能低。
- 解決方案說明:用覆蓋索引加子查詢優(yōu)化,先分頁(yè)查詢按id排序獲取id集合,再用id集合關(guān)聯(lián)原表查詢提升效率。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL無法啟動(dòng)1067錯(cuò)誤的又一種解決方法(機(jī)房斷電)
今早在對(duì)一張table 創(chuàng)建primay key過程中發(fā)生了斷電,當(dāng)電腦再次啟動(dòng)時(shí)候,發(fā)現(xiàn)mysql 服務(wù)無法啟動(dòng),使用 net start 提示 1067錯(cuò)誤,折騰了2個(gè)小時(shí)無法解決,后來只能通過手工刪除數(shù)據(jù)文件,日志文件,再啟動(dòng)服務(wù),然后導(dǎo)入數(shù)據(jù)來完成2013-01-01
MySQL存儲(chǔ)過程中使用動(dòng)態(tài)行轉(zhuǎn)列
這篇文章主要為大家介紹了MySQL存儲(chǔ)過程中使用動(dòng)態(tài)行轉(zhuǎn)列的相關(guān)資料,需要的朋友可以參考下2016-01-01
MySQL 數(shù)據(jù)庫(kù)鎖的實(shí)現(xiàn)
本文主要介紹了MySQL 數(shù)據(jù)庫(kù)鎖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
mysql條件查詢and or使用方法及優(yōu)先級(jí)實(shí)例分析
這篇文章主要介紹了mysql條件查詢and or使用方法及優(yōu)先級(jí),結(jié)合實(shí)例形式分析了mysql條件查詢and or基本功能、用法及優(yōu)先級(jí)相關(guān)操作技巧,需要的朋友可以參考下2020-04-04
MySQL主從數(shù)據(jù)庫(kù)搭建的實(shí)現(xiàn)
本文主要介紹了MySQL8.0主從復(fù)制搭建步驟,包括配置文件修改、復(fù)制用戶權(quán)限設(shè)置、主庫(kù)狀態(tài)查詢、SSL證書生成及數(shù)據(jù)同步,具有一定的參考價(jià)值,感興趣的可以了解一下2025-06-06
SQL數(shù)據(jù)去重的3種方法實(shí)例詳解
SQL去重是數(shù)據(jù)分析工作中比較常見的一個(gè)場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于SQL數(shù)據(jù)去重的3種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01

