国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一張表到底建多少個索引才是合適呢?

數據庫 其他數據庫
關于索引,是數據庫后臺用來加快查詢速度的強大工具,索引通過提供快速查找所需數據的方法來增強查詢能力。但我們經常聽到這樣一句話:“索引是把雙刃劍”。

上周的一天,到公司接了杯水剛剛坐穩,就看到 DBA就在群里@ 某個研發帥哥,說“你們表已經有10個索引了,怎么這次還要加呢?”

關于索引,是數據庫后臺用來加快查詢速度的強大工具,索引通過提供快速查找所需數據的方法來增強查詢能力。

但我們經常聽到這樣一句話:“索引是把雙刃劍”。

說明索引并不是越多越好,索引可以提高查詢的效率,但會降低寫數據的效率,有時不恰當的索引還會降低查詢的效率。

那我就在想:一張表到底建多少個索引才是合適呢?

要搞懂這個問題,我們就需要弄清楚以下這幾個問題:

1)常見的索引分類有哪些?

2)MySQL 是如何使用索引的?

3)一張表最多可以建多少索引?

4)新建索引的規范原則有哪些?

本文我們就一起來展開聊聊這幾個問題~

1、常見的索引分類有哪些?

1.1 應用層分類

從應用層面,常見分類:

  • 普通索引INDEX:加速查找
  • 唯一索引:
  • 主鍵索引PRIMARY KEY:加速查找+約束(不為空、不能重復)
  • 唯一索引UNIQUE:加速查找+約束(不能重復)
  • 聯合索引:
  • PRIMARY KEY(id,name):聯合主鍵索引

  • UNIQUE(id,name):聯合唯一索引

  • INDEX(id,name):聯合普通索引

1.2 數據結構層分類

從數據結構層面,分類如下:

  • 哈希(hash)索引
  • 基于哈希函數來實現。哈希函數會將索引鍵值(如數據庫表中的某個字段值)作為輸入,通過特定的算法運算,生成一個固定長度的哈希值。
  • 查詢速度快,但不支持范圍查找
  • B 樹(btree)索引
  • 一種平衡的多叉樹數據結構。B 樹索引會將表中的索引鍵值按照一定的順序(如升序或降序)存儲在樹的節點中。每個節點可以存儲多個鍵值以及指向其他節點的指針。

  • 支持范圍查詢,但占用空間較大

圖片圖片

2、新建索引的規范原則有哪些?

關于新建索引,通常需要注意以下規范原則:

2.1 最左前綴匹配原則

MySQL 會一直向右匹配直到遇到范圍查詢(>、<、between、like)就停止匹配

比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的;

如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。

2.2 盡量選擇區分度高的列作為索引

區分度的公式是:count(distinct col)/count(*),表示字段不重復的比例,比例越大我們掃描的記錄數越少。

唯一鍵的區分度是1,而一些 status 狀態、性別等 字段可能在大數據面前區分度就是0。

2.3 索引列不能參與計算

保持索引列“干凈”,這個原因其實很簡單,b+樹中存的都是數據表中的字段值。但是在進行檢索時,需要把所有元素都應用函數才能比較,顯然成本太大。

比如 from_unixtime(create_time) = ’2014-05-29’ 就不能使用到索引,需要將語句改寫成:create_time = unix_timestamp(’2014-05-29’)。

2.4 盡量的擴展索引,不要新建索引

比如表中已經有a的索引,現在要加(a,b)的索引,那么只需要修改原來的索引即可,而不建議再單獨去建一個b索引。

3、MySQL 是如何使用索引的?

索引用于快速查找具有特定列值的行,其目的在于提高查詢效率。

與我們查閱圖書所用的目錄是一個道理:先定位到章,然后定位到該章下的一個小節,然后找到頁數。相似的例子還有:查字典,查火車車次,飛機航班等。

本質都是:通過不斷地縮小想要獲取數據的范圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件。

也就是說,有了這種索引機制,我們可以總是用同一種查找方式來鎖定數據。

數據庫也是一樣,但顯然要復雜得多,因為不僅面臨著等值查詢,還有范圍查詢(>、<、between、in)、模糊查詢(like)、并集查詢(or)等等。數據庫應該選擇怎么樣的方式來應對所有的問題呢?

大多數 MySQL 索引(PRIMARY KEY、UNIQUEINDEX 和FULLTEXT)都存儲在 B樹 中。

另外:

空間數據類型使用 R 樹;

MEMORYtable 還支持哈希索引;

InnoDB 對 FULLTEXT 索引使用倒排列表。

在 MySQL 中,使用索引進行以下操作:

3.1  = 和 in 可以亂序

比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,MySQL 的查詢優化器會幫你優化成索引可以識別的形式。

3.2 and 與 or

聯合索引:(d,a,b,c)

1)查詢條件:

a = 10 and b = 'xxx' and c > 3 and d =4

MySQL 會按照聯合索引,從左到右的順序找一個區分度高的索引字段(這樣便可以快速鎖定很小的范圍),加速查詢,即按照d—>a->b->c的順序

2)查詢條件:

a = 10 or b = 'xxx' or c > 3 or d =4

MySQL 會按照條件的順序,從左到右依次判斷,即a->b->c->d

4、一張表最多可以建多少個索引?

4.1 理論上來說

MySQL 的存儲引擎(如 InnoDB、MyISAM 等)本身并沒有對一個表能創建的索引數量設置一個固定數值限制,,而是由MySQL數據庫引擎內部的數據結構和算法決定的。

從數據庫設計和架構的角度,理論上只要滿足以下條件,就可以新增創建索引:

  • 存儲空間允許:每個索引都需要占用一定的磁盤空間來存儲索引數據結構,所以只要磁盤空間足夠容納新創建的索引結構及其相關數據,在空間層面就不會因空間不足而無法創建索引。
  • 性能可接受:隨著索引數量的增加,雖然查詢性能在某些情況下可能會因合適的索引而提升,但過多的索引也會帶來一些負面效應,比如數據更新(插入、刪除、修改操作)時需要同時更新相關索引,這會導致更新操作變慢。只要系統整體性能(包括查詢性能和更新性能等)在可接受的范圍內,理論上可以繼續創建索引。

4.2 實際應用情況

然而在實際應用場景中,通常不會無限制地創建索引。一方面是因為上述提到的性能問題,過多的索引往往會導致數據更新操作變得極為緩慢,嚴重影響系統的正常運行。

例如,在一個高并發的電商訂單處理系統中,如果對訂單表的大量字段都創建了索引,那么每一次訂單的插入、修改或刪除操作,都要花費大量時間來更新相關索引,導致訂單處理效率大幅下降。

另一方面,不同的 MySQL 版本以及不同的存儲引擎在實際表現上也會有差異。

例如,對于一個擁有百萬條記錄的用戶信息表,在 MySQL 5.7 中按照用戶姓氏進行模糊查詢,可能需要遍歷相當一部分數據,查詢速度相對較慢,假設平均每次查詢需要 20 秒。而 MySQL 8.0 引入了新的索引算法和數據結構優化,新的索引算法對這種模糊查詢的支持更好,同樣的查詢可能只需要 5 秒左右,性能提升明顯。

總結

索引是應用程序設計和開發的一個重要方面。若索引太多,應用程序的性能可能會受到影響。而索引太少,對查詢性能又會產生影響,要找到一個平衡點,這對應用程序的性能至關重要。

MySQL 表能創建的索引數量沒有一個確切的、通用的絕對上限,而是要綜合考慮多方面因素,在滿足性能要求和存儲空間允許的條件下合理創建索引。

其實做了這么長時間的語句優化后才發現,任何數據庫層面的優化都抵不上應用系統的優化,同樣是MySQL,可以用來支撐Google/FaceBook/Taobao應用,但可能連你的個人網站都撐不住。套用最近比較流行的話:“查詢容易,優化不易,且寫且珍惜!”

責任編輯:武曉燕 來源: 架構精進之路
相關推薦

2020-06-16 11:00:40

線程Java代碼

2022-03-08 22:21:55

網絡包隊列網卡

2025-03-06 08:21:23

2025-02-10 00:20:00

2024-02-26 08:28:24

Java線程CPU

2023-06-25 10:04:50

自動駕駛智能

2020-11-11 10:10:20

調用函數參數變量

2019-12-19 10:28:46

5G基站網絡

2017-07-18 13:09:20

互聯網

2013-11-29 10:09:41

物聯網

2022-06-29 08:22:05

NFTWeb3元宇宙

2023-09-26 16:44:14

光模塊

2019-01-08 09:23:16

Java字符串編碼

2022-11-17 12:09:51

2020-12-25 13:13:22

程序員數據軟件

2021-02-07 09:01:10

Java并發編程

2019-09-11 10:12:12

華為

2018-09-06 11:20:24

CDNDDoS網站

2021-02-02 21:50:31

MySQL 8.0ExcelMySQL 5.7

2021-02-09 17:21:55

SQL數據庫存儲
點贊
收藏

51CTO技術棧公眾號

国产一区啦啦啦在线观看| 亚洲国产高潮在线观看| 亚洲一区3d动漫同人无遮挡 | 国产一区二区福利| 国产精品美女久久久久av福利| 天堂日韩电影| 久久99精品国产99久久6尤物| av资源亚洲| 亚洲第一区中文99精品| freemovies性欧美| 欧美在线免费视屏| 波多野结衣在线影院| 色999日韩国产欧美一区二区| 色视频在线播放| 亚洲一级二级在线| 超碰在线人人| 日韩欧美成人免费视频| 在线观看黄色小视频| 亚洲国产视频直播| 在线观看视频色潮| 精品国产精品自拍| 国产资源在线播放| 制服视频三区第一页精品| avav免费在线观看| 欧美日韩大片| 亚洲网站在线观看| 祥仔av免费一区二区三区四区| 中文国产亚洲喷潮| 一区二区三区视频播放| 91禁外国网站| 日韩不卡一区| 国产综合av一区二区三区| 国产精品一区毛片| 国产美女视频免费| 久久亚洲影视婷婷| 日日噜噜夜夜狠狠视频| 五月天视频一区| 色多多视频在线观看| 精品视频在线免费观看| 肉体视频在线| 在线观看欧美日韩| 免费福利视频一区| 666精品在线| 奇米影视7777精品一区二区| 91精品国产91久久久久麻豆 主演| 国产精品区一区二区三区| 在线观看你懂得| 亚洲国产精品成人一区二区| 福利视频亚洲| 日本久久久久久久| 国产精品亚洲综合久久| 久久国产精品免费观看| 久久精品视频一区二区| 欧美精品一区二区三区涩爱蜜| 欧美日韩综合不卡| 亚洲综合av一区二区三区| 欧美一级片久久久久久久| 国色天香一区二区| 拔插拔插海外华人免费| 夜夜嗨av一区二区三区中文字幕| 国产网站在线免费观看| 中文字幕久久久av一区| 国产麻豆精品久久| 欧美理论一区二区| 中文字幕精品一区二区精品绿巨人 | 瑟瑟视频在线看| 色综合久综合久久综合久鬼88| 国产在线播放精品| av成人在线电影| 国产成人在线看| 情趣网站视频在线观看| 91精品国产手机| 美女日韩一区| 国产精品视频免费观看| 波多野结衣在线一区| 嫩草研究院在线观看| 中文字幕久久精品| 一区二区亚洲精品| 手机看片福利日韩| 日韩欧美一区二区视频| 日日狠狠久久偷偷综合色| 欧美亚洲另类在线一区二区三区| 中文字幕国产一区二区| 国产黄色在线观看| 2025国产精品视频| 国产在线播放一区三区四| 欧美h版电影| 中文字幕久热精品视频在线| 五月激情综合| 国产一区视频免费观看| 欧美一区二区成人6969| 亚洲精品一级二级三级| 国产免费xxx| 在线观看一区日韩| 91精品导航| 偷拍盗摄高潮叫床对白清晰| 欧美视频中文在线看| 蜜桃在线一区| 这里只有精品66| 欧美性猛交xxxx富婆| 国产午夜久久av| 日本欧洲国产一区二区| 午夜精品久久久| 日本午夜精品久久久| 国产精品裸体瑜伽视频| 日韩女优电影在线观看| 欧美日韩亚洲一区二区三区在线| 亚洲少妇久久久| 在线观看成人黄色| 男男视频亚洲欧美| 男人天堂久久久| 亚洲在线免费视频| 亚洲国产综合91精品麻豆| 粉嫩一区二区三区在线观看| 中文字幕一区二区三区最新| 午夜精品福利一区二区蜜股av | 亚洲国产日韩精品在线| 欧美一区精品| h短视频大全在线观看| 欧美极品在线播放| 99久久99精品久久久久久| 日日夜夜天天综合入口| 91网站在线免费观看| 一区二区国产盗摄色噜噜| 7m精品国产导航在线| 免费大片在线观看| 精品国产一区av| 岛国一区二区三区| 亚洲电影观看| 日韩av在线电影观看| 欧美日韩免费一区二区三区视频| 亚洲一区欧美| 香蕉国产在线| 亚洲自拍偷拍色图| 色偷偷成人一区二区三区91| 日韩欧美不卡| 日本又骚又刺激的视频在线观看| 国产精品色午夜在线观看| 亚洲免费在线电影| 蜜桃成人av| 国产国产国产国产国产国产| 日本视频久久久| 亚洲成人自拍一区| 亚洲成av人片乱码色午夜| 亚洲成人观看| 国产欧美一区二区三区另类精品 | 亚洲成人av在线播放| 狂野欧美一区| 91视频欧美| 欧美中文字幕在线观看视频 | 97se国产在线视频| 欧美少妇一区二区| 久久青草久久| 久久男人av资源站| 男女激情免费视频| 久久99精品视频一区97| 国产精品久久久一区麻豆最新章节| 欧美成人精品一级| 美乳在线观看| 国产区一区二区三区| 精品区一区二区| 成人av电影免费在线播放| 免费观看亚洲视频大全| 另类图片亚洲色图| 国产精品久久久久久久久久免费 | 91精品国产91久久久久久密臀 | 都市激情久久久久久久久久久| 欧美精品色综合| 九色|91porny| 日韩在线观看一区二区三区| 91在线精品| 99久久精品免费看国产四区| 欧美xfplay| 91免费视频网址| 国产亚洲一区二区三区不卡| 欧美老女人性开放| 一区二区在线中文字幕电影视频| 日韩中文字幕在线播放| 亚洲欧美一区二区三区孕妇| 亚洲国产高清视频| 九七影院97影院理论片久久| 成人高清免费| 相泽南亚洲一区二区在线播放| 久久偷看各类女兵18女厕嘘嘘| 亚洲成a人在线观看| 精品一区二区三区免费播放| 日本午夜精品| 丁香花在线观看完整版电影| 丰满少妇在线观看| 欧美极品视频一区二区三区| 欧美猛交免费看| 在线播放亚洲一区| 国产精品久久久久国产精品日日| 国产精品毛片一区二区三区| 久久爱.com| 久久精品视频观看| 成人午夜剧场免费观看完整版| 色一情一区二区三区四区| 91av成人在线| 亚洲男人天堂视频|