Mysql
我應該創建一個多列唯一索引嗎?
我創建了以下 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 上快速找到該值,否則它可能需要掃描幾乎整個索引。
如果其中任何一個為真,您將創建索引:
- 有一些查詢或 DML 語句可以從該索引中受益。
- 您希望強制索引列組合的唯一性。
如果所有這些都是真的,您將不會創建索引:
- 沒有任何查詢或 DML 語句可以從中受益。
- 您不想強制這些列的唯一性。
- 針對該表的 DML 語句性能至關重要,減少一個索引的好處可以抵消查詢性能的損失(如果有的話)。
這同樣適用於非多列索引。