Mysql

我應該創建一個多列唯一索引嗎?

  • June 24, 2014

我創建了以下 MySQL 表,它儲存了使用者訪問了我們網站的哪些部分(以及Count訪問次數):

創建表`訪問`(
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`User` int(10) unsigned NOT NULL,
`EventKind` enum('search','purchase','subsectionList','event','like','superprice','toursList','abonementsList','abonement') NOT NULL,
`SiteSection` enum('section','subsection','superprice','region','city','children','tour','abonement') NOT NULL,
`Object` int(10) unsigned NOT NULL DEFAULT '0',
`Count` int(10) unsigned NOT NULL DEFAULT '0',
主鍵(`ID`),
KEY `使用者`(`使用者`),
KEY `EventKind` (`EventKind`),
KEY `SiteSection` (`SiteSection`),
KEY `對象`(`對象`)
) 引擎=MyISAM;

四重 User/EventKind/SiteSection/Object 始終是唯一的。我的問題:添加一個 4 列的唯一鍵是否值得(特別是由於性能考慮)?

該數據將用於向使用者顯示與他之前訪問相關的網站這些部分。

唯一索引的好處是當第一個值匹配時搜尋停止,但這需要 WHERE 部分與索引完全匹配。在你的情況下,索引會很大。如果幸運的話,可能會在 b-tree 上快速找到該值,否則它可能需要掃描幾乎整個索引。

如果其中任何一個為真,您將創建索引:

  1. 有一些查詢或 DML 語句可以從該索引中受益。
  2. 您希望強制索引列組合的唯一性。

如果所有這些都是真的,您將不會創建索引:

  1. 沒有任何查詢或 DML 語句可以從中受益。
  2. 您不想強制這些列的唯一性。
  3. 針對該表的 DML 語句性能至關重要,減少一個索引的好處可以抵消查詢性能的損失(如果有的話)。

這同樣適用於非多列索引。

引用自:https://dba.stackexchange.com/questions/68846