我是否复制了一个MySQL索引,或者两者兼而有之?

时间:2017-10-30 12:55:36

标签: mysql indexing

我有一个包含几个字段的表,我正在尝试索引:

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 索引是唯一的,所以可能需要保留两者。

2 个答案:

答案 0 :(得分:1)

(user_id)上的索引与(user_id, item_number)上的索引相比是多余的。你不需要第一个索引。您应该删除它,因为它占用存储空间并减慢更新和插入操作。

出于索引的目的,MySQL使用多列索引中的前导列或列,就像它们是独立索引一样。

请注意,如果(user_id)上的索引是唯一索引而另一个索引不是,那么您需要两个索引。为什么?在这种情况下,您将使用第一个索引来强制执行唯一性约束。

答案 1 :(得分:0)

  • 拥有PRIMARY KEY很重要。
  • PK是UNIQUE

因此,摆脱两个索引只有

PRIMARY KEY(user_id, item_number)