我有一个包含几个字段的表,我正在尝试索引:
user_id = Int that divides the data between user accounts.
item_number = Non-unique Int that a user sets when creating new items.
我有两个索引:
idx_user_id: Fields = user_id, Type = BTREE, Unique = NO
idx_user_id_item_number: Fields = user_id AND item_number, Type =
BTREE, Unique = YES
我想知道 idx_user_id 是否是不必要的,因为我们也用user_id启动 idx_user_id_item_number ,查询将使用它并得到相同的结果。我唯一担心的是因为 idx_user_id_item_number 索引是唯一的,所以可能需要保留两者。
答案 0 :(得分:1)
(user_id)
上的索引与(user_id, item_number)
上的索引相比是多余的。你不需要第一个索引。您应该删除它,因为它占用存储空间并减慢更新和插入操作。
出于索引的目的,MySQL使用多列索引中的前导列或列,就像它们是独立索引一样。
请注意,如果(user_id)
上的索引是唯一索引而另一个索引不是,那么您需要两个索引。为什么?在这种情况下,您将使用第一个索引来强制执行唯一性约束。
答案 1 :(得分:0)
PRIMARY KEY
很重要。UNIQUE
。因此,摆脱两个索引只有
PRIMARY KEY(user_id, item_number)