mysql 索引壓縮 MySQL 索引壓縮碎片

2021-10-17 18:02:02 字數 1327 閱讀 6092

mysql 索引簡介

索引也叫「鍵」(key),是儲存引擎用於快速找到記錄的一種資料結構。

索引對於良好的效能非常關鍵。資料量越來越大的時候,索引的重要性也會體現出來。

例如下面的sql:

select * from user where userid=123;

如果沒有建立索引,此時查詢會全表掃瞄

如果在userid欄位建立了索引,會根據索引來進行查詢。

下面對於同樣的語句使用explain 進行執行計畫分析。

下圖是未建立索引時的執行計畫,可以看到type是all,key對應的內容為空,說明沒有索引或者未命中索引。

下圖是建立了userid的索引的執行計畫,可以看到type是ref,possible_keys 是推測的索引名稱,key是索引名稱。這樣會減輕很多查詢的壓力。

mysql 索引碎片

在資料表使用很長時間後,表上的b-tree索引可能會碎片化,會降低查詢的效率。碎片化的索引可能會以很差或者無序的方式儲存在磁碟上。

如下圖,是未經優化的資料表的使用情況。

執行語句:show table status like  'tables';,可以得到下圖:

字段解釋:

data_length : 資料的大小。

index_length: 索引的大小。

data_free :資料在使用中的留存空間,如果經常刪改資料表,會造成大量的data_free。

如果遇到上述情況,需要及時清理碎片,以便清理碎片,提公升效率。

可以看到mysql 的資料檔案一般有兩種:ibd,frm。

frm檔案是資料表定義與格式。比如欄位的型別。

ibd檔案是資料表的資料內容,主要是由資料內容與索引內容組成。可以看到當前需要整理的資料表的ibd檔案是240mb。

mysql 壓縮索引碎片

執行命令:optimize table tablename;可以進行壓縮索引碎片。

需要注意的是,這個操作不應經常使用,以月左右的時間段為基數進行一次清理即可。

在執行optimize命令時,會鎖定該錶,相關操作會受到一定影響。

檢視壓縮後的引數,如下圖:

可以看到data_free為0,說明無留存空間了。index_length 也少了很多。

檢視資料檔案,同樣得到了驗證:

可以看到此表的ibd檔案降到了160mb。較之前的240mb容量,釋放了很多空間。

mysql 雜湊索引 MySQL索引之雜湊索引

雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...

mysql主鍵索引 MySQL索引之主鍵索引

在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...

mysql聚集索引 MySQL索引之聚集索引介紹

在mysql裡,聚集索引和非聚集索引分別是什麼意思,有什麼區別?在mysql中,innodb引擎表是 聚集 索引組織表 clustered index organize table 而myisam引擎表則是堆組織表 heap organize table 也有人把聚集索引稱為聚簇索引。當然了,聚集索...