MySQL 索引解析

2021-09-24 20:12:07 字數 887 閱讀 7820

如果a的x次方等於n(a>0,且a不等於1),那麼數x叫做以a為底n的對數(logarithm),記作x=logan

通過上面的分析,我們知道io次數取決於b+數的高度 h,

假設當前資料表的資料為 n,

每個磁碟塊的資料項的數量是 m,

則有h=㏒(m+1)n,

當資料量n一定的情況下,m越大,h越小;

而m = 磁碟塊的大小(固定) / 資料項的大小,  大

磁碟塊的大小也就是乙個資料頁的大小,是固定的,

如果資料項佔的空間越小,資料項的數量越多,樹的高度越低。

這就是為什麼每個資料項,即索引欄位要盡量的小,比如int佔4位元組,要比bigint8位元組少一半。

這也是為什麼b+樹要求把真實的資料放到葉子節點而不是內層節點,

一旦放到內層節點,磁碟塊的資料項會大幅度下降,導致樹增高。

當資料項等於1時將會退化成線性表。

即索引的最左匹配特性。

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

=和in可以亂序

盡量選擇區分度高的列作為索引,區分度的公式是count(distinct col)/count(*),表示欄位不重複的比例,比例越大我們掃瞄的記錄數越少,唯一鍵的區分度是1,

而一些狀態、性別字段可能在大資料面前區分度就是0,那可能有人會問,這個比例有什麼經驗值嗎?

使用場景不同,這個值也很難確定,一般需要join的字段我們都要求是0.1以上,即平均1條掃瞄10條記錄

索引列不能參與計算

from_unixtime(create_time) = 』2014-05-29』

create_time = unix_timestamp(』2014-05-29』);

盡量的擴充套件索引,不要新建索引

mysql索引深入解析

1.什麼是b tree 2.b tree在兩大引擎下的體現形式 3.理解幾大索引原則 推薦乙個資料結構視覺化的 在參與開發的第乙個專案中,有乙個特別嚴重的問題就是mysql的sql優化,sql優化的基礎就是索引,我發現我根本沒有理解mysql的索引,所以我重新學習了一下索引。索引是為了加速對錶中資料...

深入解析MySQL索引原理

一.什麼是索引 為什麼要建立索引?關於索引的理解,個人更加喜歡將其比喻為字典裡面的目錄,根據字典來進行查詢的速度遠大於每一頁逐個逐個字排查的速度。索引主要用於快速找出在某個列中有特定值的行,倘若不使用索引,mysql必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢資料所花費的時間就越多...

SQL Server索引解析

什麼是索引 拿漢語字典的目錄頁 索引 打比方 正如漢語字典中的漢字按頁存放一樣,sql server中的資料記錄也是按頁存放的,每頁容量一般為4k 為了加快查詢的速度,漢語字 詞 典一般都有按拼音 筆畫 偏旁部首等排序的目錄 索引 我們可以選擇按拼音或筆畫查詢方式,快速查詢到需要的字 詞 同理,sq...