索引也叫「鍵」(key),是儲存引擎用於快速找到記錄的一種資料結構。
索引對於良好的效能非常關鍵。資料量越來越大的時候,索引的重要性也會體現出來。
例如下面的sql:
select * from user where userid=123;
如果沒有建立索引,此時查詢會全表掃瞄
如果在userid欄位建立了索引,會根據索引來進行查詢。
下面對於同樣的語句使用explain 進行執行計畫分析。
下圖是未建立索引時的執行計畫,可以看到type是all,key對應的內容為空,說明沒有索引或者未命中索引。
下圖是建立了userid的索引的執行計畫,可以看到type是ref,possible_keys 是推測的索引名稱,key是索引名稱。這樣會減輕很多查詢的壓力。
在資料表使用很長時間後,表上的b-tree索引可能會碎片化,會降低查詢的效率。碎片化的索引可能會以很差或者無序的方式儲存在磁碟上。
如下圖,是未經優化的資料表的使用情況。
執行語句:show table status like 'tables';,可以得到下圖:
字段解釋:
data_length : 資料的大小。
index_length: 索引的大小。
data_free :資料在使用中的留存空間,如果經常刪改資料表,會造成大量的data_free。
如果遇到上述情況,需要及時清理碎片,以便清理碎片,提公升效率。
可以看到mysql 的資料檔案一般有兩種:ibd,frm。
frm檔案是資料表定義與格式。比如欄位的型別。
ibd檔案是資料表的資料內容,主要是由資料內容與索引內容組成。可以看到當前需要整理的資料表的ibd檔案是240mb。
執行命令:optimize table tablename;可以進行壓縮索引碎片。
需要注意的是,這個操作不應經常使用,以月左右的時間段為基數進行一次清理即可。
在執行optimize命令時,會鎖定該錶,相關操作會受到一定影響。
檢視壓縮後的引數,如下圖:
可以看到data_free為0,說明無留存空間了。index_length 也少了很多。
檢視資料檔案,同樣得到了驗證:
可以看到此表的ibd檔案降到了160mb。較之前的240mb容量,釋放了很多空間。
mysql 索引壓縮 MySQL 索引壓縮碎片
mysql 索引簡介 索引也叫 鍵 key 是儲存引擎用於快速找到記錄的一種資料結構。索引對於良好的效能非常關鍵。資料量越來越大的時候,索引的重要性也會體現出來。例如下面的sql select from user where userid 123 如果沒有建立索引,此時查詢會全表掃瞄 如果在user...
mysql索引碎片整理 MysqL碎片整理優化
先來說一下什麼是碎片,怎麼知道碎片有多大!簡單的說,刪除資料必然會在資料檔案中造成不連續的空白空間,而當插入資料時,這些空白空間則會被利用起來.於是造成了資料的儲存位置不連續,以及物理儲存順序與理論上的排序順序不同,這種是資料碎片.實際上資料碎片分為兩種,一種是單行資料碎片,另一種是多行資料碎片.前...
檢視Mysql索引頁碎片
查詢索引頁碎片 show table status like 表名 當data free 列值大於0時表示有碎片 只要刪除過資料就會產生,前提是有建立索引 優化表 optimize table 表名 建立索引條件 或 表資料量大 資料量小的話建立索引效果不明顯,反而浪費物理空間,增加維護表難度等 主...