2016-10-03 88 views
0

我有一個有趣的問題:聚簇索引和唯一索引有什麼區別?什麼更好,更快,爲什麼?集羣或唯一索引MySql DB?

+1

你讀過例如[聚簇和非聚簇索引實際上意味着什麼](http://stackoverflow.com/questions/1251636/what-do-clustered-and-non-clustered-index-actually-mean)或[mysql文檔](https ://dev.mysql.com/doc/refman/5.7/en/innodb-index-types.html)?如果不是,現在就做。如果是的話:沒有「更好」(特別是沒有「什麼」)。但你現在應該知道這一點。如果你有更具體的問題,你應該問一個更具體的問題。 – Solarflare

回答

0

隨着MySQL的InnoDB引擎,你會得到普通指數的3種選擇:

  • PRIMARY KEY - 「集羣」 數據和 「獨一無二」。 (經常AUTO_INCREMENT
  • UNIQUE - 唯一的,不聚集。
  • INDEX - 非唯一,不聚類。

所有的實現都是BTrees。聚集意味着數據在葉節點中。

注意事項:

  • 任何3個選擇可以與搜索行(S)的表現幫助* InnoDB的需要PRIMARY KEY
  • 如果您希望數據庫在您嘗試插入已存在的內容時吐出,則需要指定PRIMARY KEYUNIQUE的列。
  • 輔助鍵(UNIQUEINDEX)通過PRIMARY KEY查找數據。推論1:PK找到一排更快。推論2:笨重的(例如,VARCHAR(255))PK是每個輔助密鑰的額外負擔。
  • 「覆蓋」次級密鑰不需要超出其BTree。
  • 數據和索引以16KB塊單位高速緩存在RAM中;高速緩存可能是是性能中的重要考慮因素。
  • 由於I/O較高,索引無法完全緩存時,UUID/GUID索引非常糟糕。
  • INSERT必須立即檢查PRIMARY KEY和任何UNIQUE密鑰重複,但它可以延遲更新其他輔助密鑰。 (這可能插入過程對性能的影響。)

從這些細節,有時可以將答案演繹您的問題。

(警告:不是InnoDB的其他引擎有一些不同的特點。)