成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL:好好的索引,為什么要下推?

數(shù)據(jù)庫(kù) MySQL
前段時(shí)間有讀者提議講講索引下推,這期就把這事兒安排上。多余的前言就不贅述了,我們直接開(kāi)始。

本文轉(zhuǎn)載自微信公眾號(hào)「IT界農(nóng)民工」,作者萊烏。轉(zhuǎn)載本文請(qǐng)聯(lián)系IT界農(nóng)民工公眾號(hào)。

前段時(shí)間有讀者提議講講索引下推,這期就把這事兒安排上。多余的前言就不贅述了,我們直接開(kāi)始。

列位坐好!

 

- 思維導(dǎo)圖 -

回表操作

對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),只要涉及到索引,必然繞不過(guò)去回表操作。當(dāng)然這也是我們今天所講內(nèi)容的前調(diào)基礎(chǔ)。

說(shuō)到回表,我們需要從索引開(kāi)始說(shuō)起。別擔(dān)心,不會(huì)長(zhǎng)篇大論,這里只是簡(jiǎn)單講下主鍵索引與普通索引,目的是讓大家對(duì)回表操作有個(gè)認(rèn)識(shí)。如果你對(duì)回表操作很熟悉了,那么可以跳過(guò)這一段。

這里我們只以 Innodb 存儲(chǔ)引擎作為講解對(duì)象。

主鍵索引

主鍵索引在底層的數(shù)據(jù)存儲(chǔ)是通過(guò) B+ 樹(shù)來(lái)實(shí)現(xiàn)的。簡(jiǎn)單來(lái)說(shuō),就是除葉子節(jié)之外的其他節(jié)點(diǎn)都存儲(chǔ)的是主鍵值。而葉子節(jié)點(diǎn)上存儲(chǔ)的是整行的數(shù)據(jù)。

大體結(jié)構(gòu)如下圖所示。

 

非主鍵索引

除了主鍵索引外,其它的索引都被稱為非主鍵索引。與主鍵索引不同的是,非主鍵索引的葉子節(jié)點(diǎn)上存儲(chǔ)的是主鍵的值。

 

那讓我們?cè)倩氐介_(kāi)始的問(wèn)題,什么是回表操作?

當(dāng)我們?cè)诜侵麈I索引上查找一行數(shù)據(jù)的時(shí)候,此時(shí)的查找方式是先搜索非主鍵索引樹(shù),拿到對(duì)應(yīng)的主鍵值,再到主鍵索引樹(shù)上查找對(duì)應(yīng)的行數(shù)據(jù)。

這種操作就叫作回表操作。

好了,這里你應(yīng)該了解了什么是回表操作了。簡(jiǎn)單來(lái)講,就是在非主鍵索引樹(shù)上拿到對(duì)應(yīng)的主鍵值,然后回到主鍵索引上找到對(duì)應(yīng)的行數(shù)據(jù)。

這樣做的前提條件是,所要查找的字段不存在于非主鍵索引樹(shù)上。

低版本操作

講完了回表操作,讓我們繼續(xù)回到這篇文章的主題——索引下推。

其實(shí)在 Mysql 5.6 版本之前是沒(méi)有索引下推這個(gè)功能的,從 5.6 版本后才加上了這個(gè)優(yōu)化項(xiàng)。所以在引出索引下推前還是先回顧下沒(méi)有這個(gè)功能時(shí)是怎樣一種處理方式。

我們以一個(gè)真實(shí)例子來(lái)進(jìn)行講解。

在這里有張用戶表 user,記錄著用戶的姓名,性別,身高,年齡等信息。表中 id 是自增主鍵,(name,sex) 是聯(lián)合索引。在這里用 1 表示男,2 表示女。現(xiàn)在需要查找所有姓王的男性信息。

SQL 實(shí)現(xiàn)起來(lái)很簡(jiǎn)單:

 

但是它的實(shí)現(xiàn)原理是什么呢?

根據(jù)聯(lián)合索引最左前綴原則,我們?cè)诜侵麈I索引樹(shù)上找到第一個(gè)滿足條件的值時(shí),通過(guò)葉子節(jié)點(diǎn)記錄的主鍵值再回到主鍵索引樹(shù)上查找到對(duì)應(yīng)的行數(shù)據(jù),再對(duì)比是否為當(dāng)前所要查找的性別。

整個(gè)原理可以用下邊的圖進(jìn)行表示。


 

 

看到了吧,低版本中需要每條數(shù)據(jù)都進(jìn)行回表,增加了樹(shù)的搜索次數(shù)。如果遇到所要查找的數(shù)據(jù)量很大的話,性能必然有所缺失。

高版本操作

講完了低版本操作,讓我們繼續(xù)回到這篇文章的主題——索引下推。

知道了痛點(diǎn),那么怎么解決。很簡(jiǎn)單,只有符合條件了再進(jìn)行回表。結(jié)合我們的例子來(lái)說(shuō)就是當(dāng)滿足了性別 sex = 1 了,再回表查找。這樣原本可能需要進(jìn)行回表查找 4 次,現(xiàn)在可能只需要 2 次就可以了。

 

所以本質(zhì)來(lái)說(shuō),索引下推就是只有符合條件再進(jìn)行回表,對(duì)索引中包含的字段先進(jìn)行判斷,不符合條件的跳過(guò)。減少了不必要的回表操作。

總結(jié)

回表操作

當(dāng)所要查找的字段不在非主鍵索引樹(shù)上時(shí),需要通過(guò)葉子節(jié)點(diǎn)的主鍵值去主鍵索引上獲取對(duì)應(yīng)的行數(shù)據(jù),這個(gè)過(guò)程稱為回表操作。

索引下推

索引下推主要是減少了不必要的回表操作。對(duì)于查找出來(lái)的數(shù)據(jù),先過(guò)濾掉不符合條件的,其余的再去主鍵索引樹(shù)上查找。

 

責(zé)任編輯:武曉燕 來(lái)源: IT界農(nóng)民工
相關(guān)推薦

2019-11-01 15:50:06

MySQLES搜索引擎

2024-12-24 14:11:57

2018-01-17 09:32:07

前后端分離架構(gòu)

2017-07-11 09:22:23

MySQL索引測(cè)試

2017-07-17 09:29:41

MySQL索引測(cè)試

2022-01-05 12:03:48

MySQL索引數(shù)據(jù)

2017-08-31 09:19:50

硬盤(pán)服務(wù)器云存儲(chǔ)

2013-03-12 14:30:09

Ubuntu操作系統(tǒng)

2024-03-25 13:02:00

MySQL索引主鍵

2015-08-06 10:14:15

造輪子facebook

2022-08-15 08:27:02

基站網(wǎng)絡(luò)

2020-12-11 07:39:37

RPC MQ架構(gòu)

2024-05-24 09:28:22

2018-05-23 00:20:29

2019-09-30 07:50:51

ITOps云端ITOM

2019-12-26 14:52:31

微軟CortanaAndroid

2016-08-19 16:27:52

數(shù)據(jù)庫(kù)Mongo DB開(kāi)發(fā)

2017-04-05 18:10:05

R語(yǔ)言開(kāi)發(fā)Ross

2021-03-16 08:35:14

Kubernetes Docker容器

2022-03-30 08:21:57

合并HTTP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲一区二区三区欧美 | 毛片在线看片 | 国产三级在线观看播放 | 久久精品久久久久久 | 免费在线观看av网址 | 天堂一区在线观看 | 日韩欧美在线播放 | 国产乱精品一区二区三区 | 亚洲视频一区二区三区四区 | av高清毛片| 欧美精品在线播放 | 国产在线观看一区二区三区 | 97国产精品视频人人做人人爱 | 日韩美女爱爱 | 夜色www国产精品资源站 | 久久免费精品 | 91在线观看网址 | 老熟女毛片 | 日本三级精品 | 日本久久久久久久久 | 午夜久久久久久久久久一区二区 | 在线一区 | 国产男女精品 | 国产在线精品一区 | 国产精品xxxx | 亚洲a视频 | 亚洲欧美日本在线 | 久久精品国产一区 | 亚洲二区视频 | 午夜视频一区二区 | 秋霞电影一区二区 | 久草免费在线视频 | 成年人在线观看 | 亚洲欧美在线观看 | 91porn在线| 日本在线中文 | 久久一区二区视频 | 成人免费大片黄在线播放 | 伦理片97| 天天草天天干 | 日韩欧美一区二区三区在线播放 |