0
我注意到在幾個InnoDB表中有一個主鍵,一個唯一鍵,一個或兩個引用鍵。索引長度比數據長度本身大得多。問題是爲什麼?爲什麼在InnoDB中索引大小大於數據大小?
我可以大聲思考的唯一事情是因爲InnoDB使用聚集索引並將表數據與主鍵一起存儲在計算中包含數據大小。我沒有檢查過這個。
我注意到在幾個InnoDB表中有一個主鍵,一個唯一鍵,一個或兩個引用鍵。索引長度比數據長度本身大得多。問題是爲什麼?爲什麼在InnoDB中索引大小大於數據大小?
我可以大聲思考的唯一事情是因爲InnoDB使用聚集索引並將表數據與主鍵一起存儲在計算中包含數據大小。我沒有檢查過這個。
對於InnoDB表,的SHOW TABLE STATUS
輸出裝置執行以下操作:
Data_length
字段表示分配給羣集鍵(PRIMARY KEY
在SQL術語)的所有頁面的大小。Index_length
字段表示分配給所有非聚集鍵(全部爲INDEX
,UNIQUE
,SQL等)的所有分頁的總和大小。Data_free
表示分配給索引但目前未使用的所有範圍(不是頁面)的大小。現在,除了知道如何計算空間外,還應該記住每個輔助(非集羣)密鑰還將包含主(集羣)密鑰的所有字段。如果你的PRIMARY KEY
定義特別大,這可能相當於每個輔助密鑰中使用的空間的巨大數量。
如果您提供表格架構(使用SHOW CREATE TABLE
),我可以進一步評論。
是的。有問題的表已退出大量跨越3個或更多列組合主鍵。我提到的那一刻,我添加了一個二級密鑰索引長度。 – roarky