精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

高并發之存儲篇:關注下索引原理和優化吧!躲得過實踐,躲不過面試官!

數據庫 MySQL
本文從MySQL的存儲結構、索引的設計思路演進、美團阿里大型系統索引使用等幾個部分,闡述了索引的原理和對業務系統的重要作用。

不管是啥業務,最終數據都要落地,數據庫這一環是肯定少不了的。隨著業務發展,并發越來越高,數據庫很容易成為整個鏈路的短板。這也是大廠面試中比較常被問到的。而調優的第一步,都是從sql語句、索引入手。先得保證單個數據庫執行沒問題,才會有更高層次的分庫分表、彈性、容災等等。

Part1為什么Kafka不需要我們關心索引,而Mysql卻需要?

Kafka 和 MySQL 雖然最終數據都是落磁盤,但是兩者在用途和數據查詢方式上有著很大的差異,所以決定了數據的存儲結構不同,進而決定了索引的復雜程度。

我們先看下kafka的存儲結構:

由于 kafka 的定位是進行穩定的高性能數據讀寫。所以對磁盤來說,是采用順序讀寫的方式,落在了一些 .log 文件中,并以基準偏移量補0命名。

為了實現高速查找 kafka 創建了稀疏索引文件(隔一段數據創建一條,而非全量),即index文件。其中維護消息的 offset 和 .log文件的物理位置。通過二分查找快速定位log文件并順序掃描找到目標。

所以,kafka的索引組織方式是相對簡單、方案相對固定,但MySQL卻不行。Mysql是關系型數據庫,是為了支持復雜的業務數據查詢而創建的,查詢方式、數據獲取需求多種多樣,要求MySQL具備更加復雜的索引機制來加速復雜業務查詢場景。

Part2MySQL數據怎么被組織[1][2]

以InnoDB存儲引擎來看mysql數據存儲:

參考了三本資料,基本把最重要的部分都概括了

數據被分了多個邏輯層:行->頁->區塊->段->表空間。

我們知道,InnoDB存儲引擎表是Index organized的(數據即索引,索引即數據),他們都維護在一個B+樹上,數據段就是葉子節點,索引段就是非葉子節點;

而我們劃分的段、區塊 其實都是為了利用操作系統的資源(比如每次從磁盤加載到內存的數據大小按區塊來約定等等`)來達到更高效讀寫的目的,邏輯劃分的。

其中頁是MySQL和磁盤交互的最小單位,怎么從頁找到行,怎么聚合到塊、到段再到空間呢。

1數據記錄最小單位-- 行

從上面總圖中摘出一條記錄的結構如下圖:

我們可以看到,記錄頭中除了行號,還有下一條記錄的標識next_record,所以,我們可以通過next_record將記錄連接起來,以單向鏈表的形式,所以這就決定了,當我們在記錄鏈中尋找某記錄時,只能順序遍歷,這也決定了一條數據鏈不會太長。

但一個頁默認是16K,加上行溢出等處理,一頁最多存放7992行記錄,這么多的記錄,必須順序遍歷么?當然不需要,讓我看看頁是怎么組織記錄行的。

2與磁盤最小交互單位-- 頁

作為與磁盤交互的最小單位,是用來存放實際數據的(頁類型是b-tree Node存真實數據,還有其他類型如索引目錄頁等用來加速查詢)從上面的大圖中可以大致看到一個頁的整體結構:

讓我們來看幾個關鍵的字段參數:

Page Directory 決定著記錄項在頁內的查詢效率

為了更快速的查詢,頁目錄存儲的本頁的數據目錄(槽),包含最大最小記錄和 分組數據鏈的最大記錄的偏移量。方便使用二分法快速查找數據,不需要再從最小值開始遍歷,如下圖:

圖片來自《從根兒上理解 MySQL》

File Header決定頁和頁之間怎樣關聯

記錄本頁的一些通用信息,主要包含< 本頁頁號、上一頁、下一頁、頁類型、所屬表空間等等>。

通過頁號來找到本頁、通過上下頁進行雙向鏈表串聯、通過類型判斷是索引頁還是數據頁。。。

圖片來自《從根兒上理解 MySQL》

此字段決定了頁和頁之間可以很方便的通過上述屬性進行關聯。

Page Header決定頁的層級

存儲的本頁的數據信息,主要包含**<** 本頁記錄數量、在B+樹中的層級、歸屬的索引ID、插入方向、最大事務ID等等 >。

有了頁面的數據組織概念,那么,怎么利用這些結構來實現的數據快速查詢呢?

Part3索引的演進思路

從上面的數據組織的知識里可以看到,行記錄之間串聯成單向鏈表,在每頁中都按分組方式分布在此頁的最小記錄和最大記錄之間。

頁面之間通過上一頁、下一頁的指針,串聯成雙向鏈表,在磁盤中進行存儲,如下圖:

那么,要查詢一條記錄,可以怎么做?

3原始:順序方式

如上圖所示的數據串聯方式,自然的提供了一種查詢方式:即按主鍵順序遍歷每頁和頁中的記錄行。

但是,這樣的查詢方式,除了在頁內有二分優化,再無效率可言。怎么辦?

尋求改進:既然頁內的行記錄可以分組入槽,那數據頁之間為什么不行呢?

4改進:目錄方式

我們將頁向上聚蔟,構建一個頁號目錄,先在目錄中查找,再到對應頁中查找,就比順序查找要快很多了。

尋求改進:這樣的方式所需大量連續空間 + 目錄會隨數據變動而頻繁變動,怎么辦?

5演進:主鍵B+樹方式

其實,在敘述行記錄結構的時候,我們就看到,數據行的結構中,除了實際業務數據外,還有很多額外空間。

如record_type用來表示該記錄的類型是數據還是索引。正是這些額外的空間的設計,給InnoDB以更加適合的方式組織索引提供了支持:

圖片來自《從根兒上理解 MySQL》

這就是一棵B+樹,頁節點有層級區分,頁中的行記錄有類型區分。

業務數據都包含在葉子節點中,目錄數據都包含在其他非葉節點中。

這樣組織方式的優勢,是允許足夠少的層級容納足夠多的數據項(可以簡單的假設每一頁的數據項大小來預估)。

而這個索引方式就是我們常說的聚蔟索引。即使用主鍵值進行記錄和頁的排序,且葉子節點含有全部用戶數據。

尋求改進:如果我想用其他列來查詢,怎么辦?

6擴展:二級索引、聯合索引

二級索引

比如用戶需要根據某一列(a列)的值來查詢,那就再重新創建一個B+樹。此索引樹和聚蔟索引樹的差別在于,索引節點是以a列的值為目錄,且葉子節點只包含a列的值和主鍵兩個值。

如果用戶需要查詢除c列以外的更多信息,則需要拿主鍵ID再去聚蔟索引查一次,也叫回表。

聯合索引

二級索引是除主鍵外的單列索引,而聯合索引則是多個列共同排序。假設用戶需要用a 、b 兩個列進行有序查詢,那內在含義是,在a列值相同的情況下,再判斷b的值。

同二級索引一樣,InnoDB也需要再創建一棵B+樹,且目錄項的排序按先a,后b進行排序串聯,葉子節點的數據項只包含 a 、b、主鍵三個值。

Part4生產實踐之觸類旁通

7美團定時任務索引優化[3]

系統需要定時的撈取特定時間段內特定狀態、特定類型、特定操作者的任務進行定時處理。 

  1. select * from task   
  2. where  
  3.    status=x  
  4.    and operator_id=xxxx   
  5.    and operate_time>xxxxxxxx01  
  6.    and operate_time<xxxxxxxx99  
  7.    and type=x

開發發現此sql運行的越來越慢,希望給每個字段加二級索引,被優化師叫停,而是考慮的該表所有查詢方式后,創建了一個聯合索引: 

  1. (status,operator_id,type,operate_time) 

為什么不建多個的二級索引?為什么范圍查詢的字段要放在最后?

分析:

(1)從前面的原理部分我們知道,索引是要占內存的,不是越多越好,能起作用就行。

(2)用于范圍匹配的字段的索引位置要嚴謹。因為創建索引的時候,根據索引字段的順序來進行排序,如果把time字段放在type字段前面建索引,在查詢時,因為time是一個范圍值,那么多個time值延續到type字段,整體是無序的,無法用到type索引。

8螞蟻分布式主事務表的索引運用

螞蟻的分布式事務中的主事務表起到了維護整體事務狀態的作用,其中包含了整體事務狀態、操作時間等字段。而在業務支付發生異常,且實時回滾失敗時,需要事務恢復系統從遠程撈取前1分鐘的異常數據,并撈取對應的分支記錄表發起異步回滾。

考慮查詢效率,查詢sql會限定業務發生時間在[前10分鐘,前1分鐘],是有范圍查詢,所以,針對其他字段,業務時間的索引順序需要置于聯合索引的最后。此操作的原理和上一部分美團定時任務的原理是一樣的。

9阿里開發手冊中幾條典型的規范[4]

【強制】 在 varchar 字段上建立索引時,必須指定索引長度,沒必要對全字段建立索引,根據實際文本區分度決定索引長度。

原理關聯:字段越長,索引占內存越多,只要其長度可以保證區分度即可

【強制】 字符搜索嚴禁左模糊或者全模糊,如果需要請走搜索引擎來解決。

原理關聯:左模糊的字段不是有序的,無法用到索引

【推薦】 如果有 order by 的場景,請注意利用索引的有序性。order by 最后的字段是組合索引的一部分,并且放在索引組合順序的最后,避免出現 file_sort 的情況,影響查詢性能。

原理關聯:如果條件中有范圍查詢,則后續字段是無序的,order by時無法用到索引

【推薦】 建組合索引的時候,區分度最高的在最左邊。

原理關聯:區分度越高,查詢路徑越短,效率越高

等等,參見阿里Java開發手冊

Part5總結

本文從MySQL的存儲結構、索引的設計思路演進、美團阿里大型系統索引使用等幾個部分,闡述了索引的原理和對業務系統的重要作用。

當然,對于高并發下的數據庫的優化遠不止索引優化這一個方面,本文只從索引這一個點出發,讓大家對其優化原理和優化方向有一個大致的概念,在業務發展遇到數據庫瓶頸時能有所幫助。 

 

責任編輯:龐桂玉 來源: Coder的技術之路
相關推薦

2020-10-15 06:26:24

高并發場景冰河

2025-09-18 08:53:20

2025-09-22 08:26:37

2024-09-25 12:26:14

2023-10-13 00:00:00

并發樂觀鎖CAS

2025-09-19 11:30:23

2025-09-23 02:15:00

2025-07-18 07:19:00

2024-08-22 10:39:50

@Async注解代理

2024-03-05 10:33:39

AOPSpring編程

2025-03-07 00:00:10

2020-12-09 10:29:53

SSH加密數據安全

2022-02-11 19:06:29

MySQL索引面試官

2022-03-21 09:05:18

volatileCPUJava

2022-09-07 08:25:08

代理模式設計模式代碼

2022-09-05 08:17:57

JPA級聯java

2025-11-20 08:49:23

2022-09-29 07:30:57

數據庫索引字段

2024-02-28 10:14:47

Redis數據硬盤

2025-03-26 01:25:00

MySQL優化事務
點贊
收藏

51CTO技術棧公眾號

日本道在线视频| 成人免费午夜电影| 国产高清一区二区三区四区| 四虎在线精品| 亚洲午夜久久久久久久久电影网 | 欧美久久久久久久久久久久久| 亚洲色偷精品一区二区三区| 九九精品视频在线看| 高清视频欧美一级| 亚洲激情图片网| 卡一精品卡二卡三网站乱码| 欧美日韩一级片网站| 国产精品久久久久7777| 在线观看黄av| 99久久精品国产一区二区三区| 国产精品国产亚洲伊人久久| 久久久久久免费观看| 成人精品天堂一区二区三区| 精品国产乱码久久久久久1区2区| 免费看黄色一级大片| 金瓶狂野欧美性猛交xxxx| 中文字幕av一区 二区| 精品欧美一区二区三区久久久| 中文字幕在线2019| 免费亚洲婷婷| 国产69精品99久久久久久宅男| 欧洲美熟女乱又伦| 蜜桃一区二区三区| 精品粉嫩超白一线天av| 亚洲综合123| av成人在线观看| 欧美视频在线视频| 国产精品久久久久久久久电影网| 欧美尤物美女在线| 国产农村妇女精品| 欧美日韩在线一区二区三区| 手机在线观看免费av| 久久国产日韩欧美精品| 国产精品xxxxx| 无码人妻丰满熟妇精品区| 亚洲日本视频| 午夜精品久久17c| 欧美黄色免费看| 影视一区二区| 久久香蕉频线观| 九九热视频在线免费观看| 精品一区电影| 亚洲人在线观看| 成人在线一级片| 欧美精品系列| 在线看日韩欧美| 日本猛少妇色xxxxx免费网站| 精品在线播放| 在线日韩中文字幕| 国产极品视频在线观看| 成人影院在线| 久久视频在线直播| 欧美精品xxxxx| 韩国久久久久| 亚洲18私人小影院| 亚洲熟女综合色一区二区三区| 国产美女诱惑一区二区| 青草成人免费视频| 成人毛片一区二区三区| 日韩av一级电影| 国产日韩精品入口| 精品国产乱码一区二区三| 国产在线一区观看| 国产精品9999久久久久仙踪林| 国精产品乱码一区一区三区四区| 播五月开心婷婷综合| 精品一区二区不卡| 国产黄在线观看| 综合久久久久久| 波多野结衣与黑人| 国产伦理精品| 欧美日韩在线观看一区二区| 中国老熟女重囗味hdxx| 国产精品毛片久久久| 亚洲摸下面视频| 黄色一级片一级片| 精品二区久久| 国产精品91在线| 99久久一区二区| 99视频一区二区三区| 五码日韩精品一区二区三区视频| 免费在线看a| 亚洲五月六月丁香激情| 免费国产成人av| 精品入口麻豆88视频| 亚洲精品电影网站| 中文字幕精品亚洲| 亚洲精品男同| 国产在线久久久| 日韩一卡二卡在线| 中文字幕中文字幕在线一区| av网站大全免费| 免费在线成人激情电影| 精品少妇一区二区三区日产乱码 | 欧美破处大片在线视频| 57pao国产精品一区| 国产又粗又猛又黄又爽| 99精品久久99久久久久| 99精品视频网站| 日韩av影片| 51精品国自产在线| 黄免费在线观看| 在线不卡亚洲| 亚洲最大福利视频网| 国产一级在线观看| 亚洲国产精品一区二区久久 | 99国产精品欲| 国产欧美日韩精品一区| 18禁网站免费无遮挡无码中文| 91精品店在线| 亚洲人成在线一二| 日韩美女黄色片| 国产一区二区三区美女| 日韩影视精品| 范冰冰一级做a爰片久久毛片| 欧美成人女星排名| 久久免费看少妇高潮v片特黄| 日韩国产成人精品| 麻豆精品蜜桃一区二区三区| 羞羞污视频在线观看| 欧美色电影在线| 国产成人av一区二区三区不卡| 国产精品扒开腿做爽爽爽软件| 国产色婷婷国产综合在线理论片a| 日韩精品一二| 第一福利永久视频精品| 韩国三级视频在线观看| 最新国产精品久久久| 成人黄色在线免费| 麻豆传媒在线完整视频| 欧美日韩在线三级| 成人黄色短视频| 开心九九激情九九欧美日韩精美视频电影 | 久9re热视频这里只有精品| 久久久久久国产精品美女| 国内精品偷拍视频| 亚洲激情图片qvod| 丰满少妇一区二区三区专区 | 中文字幕中文字幕一区| 亚洲精品午夜在线观看| 日韩在线看片| 国产一区私人高清影院| 免费黄色在线| 91精品国产综合久久久蜜臀粉嫩| 疯狂撞击丝袜人妻| 久久99精品国产麻豆不卡| 亚洲最大色综合成人av| 性欧美video另类hd尤物| 精品国产一区二区三区久久狼5月| 中文字幕人妻精品一区| 国产精品区一区二区三区| 污视频网站观看| 综合视频在线| 国产精品入口免费| 色戒汤唯在线观看| 亚洲人永久免费| 亚洲一级在线播放| 亚洲素人一区二区| 91porn在线| 午夜一区在线| 亚洲一区3d动漫同人无遮挡 | 男人的天堂免费在线视频| 日韩av在线网址| 99re热视频| 亚洲欧美日韩系列| a天堂视频在线观看| 日韩国产欧美在线视频| 亚洲最新免费视频| 中文字幕久久精品一区二区| 欧美怡春院一区二区三区| 国产成人天天5g影院在线观看| 欧美日韩视频在线第一区| 欧美成人一二三区| 91麻豆精品秘密| 久久婷婷综合色| 欧美午夜在线| 日本高清视频一区二区三区| 欧美videos粗暴| 午夜剧场成人观在线视频免费观看| 免费成人av电影| 欧美一区二区三区在线观看视频| 国产午夜视频在线| 国产亚洲精品福利| 在线播放第一页| 爽好久久久欧美精品| 强开小嫩苞一区二区三区网站| 欧美wwwwww| 国产欧美最新羞羞视频在线观看| 波多野结衣精品| 日韩亚洲综合在线| 天天摸天天干天天操| 欧美嫩在线观看| 日韩欧美中文字幕一区二区| 国产精品不卡一区二区三区| 精品人妻一区二区三区香蕉| 黄色资源网久久资源365| 97国产精东麻豆人妻电影| 亚洲精品a级片| 欧美一区三区二区在线观看| 91成人入口| 国产日韩精品电影| 国产精品亚洲一区二区三区在线观看| 久久艹在线视频| 岛国大片在线观看| 亚洲国产福利在线| 亚洲免费国产视频| 欧美一区国产二区| 怡春院在线视频| 色婷婷综合久久久中文字幕| 欧美日韩一级大片| 国产精品视频在线看| 国产国语性生话播放| 国产福利一区二区三区视频在线| 一区二区三区入口| 亚洲在线观看| 国产精品12345| 国模大胆一区二区三区| 一区一区视频| 欧洲激情视频| 日本精品一区二区三区视频| 欧美电影在线观看完整版| 成人91免费视频| 年轻的保姆91精品| 亚洲qvod图片区电影| 亚洲欧美久久精品| 国产欧美在线播放| 少妇高潮一区二区三区99| 日韩美女中文字幕| 黑人巨大精品| 日本高清久久天堂| 欧美一级大黄| 国产成人拍精品视频午夜网站| 桃色av一区二区| 欧美一二三视频| 亚洲欧洲高清| 国产精品精品视频一区二区三区| 波多视频一区| 国产精品99久久久久久久久 | 国产在线看片| 久久视频这里只有精品| 在线观看av免费| 欧美高清在线播放| 波多野结衣在线观看| 91精品国产91久久久久久不卡| 国产99在线观看| 欧美在线激情网| 欧美大胆性生话| 国产精品久久久久久久久久久不卡 | 亚洲免费视频成人| 妺妺窝人体色www聚色窝仙踪| 亚洲美女视频一区| 久久久久久蜜桃| 午夜伊人狠狠久久| 免费看日批视频| 欧美视频在线观看一区| 国产精品国产一区二区三区四区 | www.色.com| 成人爽a毛片一区二区免费| 182在线视频| 久久精品水蜜桃av综合天堂| 免费黄在线观看| 亚洲男人的天堂在线aⅴ视频| 欧美爱爱小视频| 欧美日韩精品二区| 波多野结衣午夜| 6080日韩午夜伦伦午夜伦| 国产成年妇视频| 日韩经典中文字幕在线观看| 国产高清免费在线播放| 久久国产精品久久久久久| 1区2区3区在线| 国产精品久久久久999| 国产精品亚洲四区在线观看| 国产精品一级久久久| 国产成人一区| 成年人视频网站免费| 久久午夜激情| 人妻精油按摩bd高清中文字幕| av亚洲精华国产精华精| 手机av在线不卡| 亚洲午夜久久久久中文字幕久| 四虎影院在线免费播放| 日韩亚洲欧美一区二区三区| 日韩专区一区二区| 久久精品电影网站| 天堂中文av在线资源库| 成人免费视频在线观看超级碰| 精品福利网址导航| 一级二级三级欧美| 中文精品视频| 亚洲色图欧美自拍| 国产人妖乱国产精品人妖| 国产一级做a爱免费视频| 欧洲亚洲国产日韩| 日本高清视频免费看| 久久久www成人免费精品| 成人福利av| 国产二区一区| 午夜片欧美伦| 五月婷婷狠狠操| 97久久精品人人爽人人爽蜜臀| 亚洲AV成人无码精电影在线| 欧美性猛交99久久久久99按摩| 性生交大片免费看女人按摩| 一区二区三区四区在线观看视频| 免费在线观看的电影网站| 国产在线观看不卡| 国产不卡av一区二区| 蜜桃传媒一区二区三区| 黄一区二区三区| 91ts人妖另类精品系列| 欧美性猛交xxxx| 日批视频在线播放| 麻豆成人在线看| 国产香蕉久久| 日韩欧美三级一区二区| 亚洲免费网址| 亚洲蜜桃精久久久久久久久久久久| 一级做a爱片久久| 国产精品玖玖玖| 日韩中文在线不卡| 国产精品99久久久久久董美香| 久久天天狠狠| 亚洲欧美bt| 亚洲天堂网一区二区| 精品久久久久久久久久久久久久 | 成人a免费在线看| 欧美激情精品久久| 日韩一区二区三区电影| 黄色网页在线免费看| 91老司机在线| 中文字幕日韩一区二区不卡| 中文字幕第一页在线视频| 国产精品女主播在线观看| 成人小视频在线播放| 亚洲一品av免费观看| 日本欧美韩国| 亚洲伊人婷婷| 激情偷乱视频一区二区三区| 亚洲女人久久久| 日韩午夜在线观看| 伊人福利在线| 精品国产一区二区三区麻豆免费观看完整版| 欧美freesex交免费视频| 国产免费无码一区二区| 亚洲国产一二三| 亚洲欧美色视频| 国产精品成人久久久久| 999国产精品| 日本女人黄色片| 亚洲18女电影在线观看| 青青草免费在线视频| 国产精品成人品| 午夜影院欧美| 老司机av网站| 欧美日韩亚洲一区二区| 国产福利小视频在线观看| 成人精品在线视频| 亚洲性感美女99在线| 精品无码在线视频| 在线一区二区三区四区| 日本亚洲精品| 国产亚洲二区| 日韩国产欧美一区二区三区| 美女三级黄色片| 精品sm在线观看| 欧美日韩五码| 国产成人免费高清视频| 99久久综合精品| 久草热在线观看| 久久99久久亚洲国产| 亚洲欧洲av| 亚洲在线观看网站| 天天做天天摸天天爽国产一区| 大乳在线免费观看| 电影午夜精品一区二区三区 | 国产成人精品一区二区三区| 日韩av密桃| 久久性爱视频网站| 欧美色精品在线视频| 俺来俺也去www色在线观看| 日本一区视频在线播放| 国产精品综合av一区二区国产馆| 你懂的国产视频| 久久精品国产v日韩v亚洲| 精品少妇一区| 亚洲理论中文字幕| 色综合久久久网| 中文字幕在线三区| 欧美日韩免费观看一区| 国产传媒日韩欧美成人| 无码人妻久久一区二区三区不卡| 欧美国产亚洲视频| 日韩av密桃| 少妇大叫太粗太大爽一区二区|