2014-02-10 108 views
0

我注意到在幾個InnoDB表中有一個主鍵,一個唯一鍵,一個或兩個引用鍵。索引長度比數據長度本身大得多。問題是爲什麼?爲什麼在InnoDB中索引大小大於數據大小?

我可以大聲思考的唯一事情是因爲InnoDB使用聚集索引並將表數據與主鍵一起存儲在計算中包含數據大小。我沒有檢查過這個。

回答

1

對於InnoDB表,的SHOW TABLE STATUS輸出裝置執行以下操作:

  • Data_length字段表示分配給羣集鍵(PRIMARY KEY在SQL術語)的所有頁面的大小。
  • Index_length字段表示分配給所有非聚集鍵(全部爲INDEX,UNIQUE,SQL等)的所有分頁的總和大小。
  • Data_free表示分配給索引但目前未使用的所有範圍(不是頁面)的大小。

現在,除了知道如何計算空間外,還應該記住每個輔助(非集羣)密鑰還將包含主(集羣)密鑰的所有字段。如果你的PRIMARY KEY定義特別大,這可能相當於每個輔助密鑰中使用的空間的巨大數量。

如果您提供表格架構(使用SHOW CREATE TABLE),我可以進一步評論。

+0

是的。有問題的表已退出大量跨越3個或更多列組合主鍵。我提到的那一刻,我添加了一個二級密鑰索引長度。 – roarky

相關問題