3

我正在使用 Innodb 搜索引擎为用户查找表创建一个事件。

表事件_用户

event_id
user_id

Index (PRIMARY) -> event_id, user_id
Index (secondary) -> user_id, event_id ??

该应用程序将搜索用户到事件和事件到用户。如果主键是聚集的,如何定义第二个索引?应该是这样user_id,然后 MYSQL 会发现 event_id 已经存在于 PK 中,还是我应该是多余的并包含user_id, event_id在二级索引中?

另外,这对聚集索引有用吗?任何有关 Innodb 聚集索引的指导和帮助将不胜感激。谢谢!

4

1 回答 1

1

MySQL 应该能够将 PK 中的字段用作覆盖索引,而无需制作复合二级索引。

所以:

表(引擎 = INNODB)

column_a  (int)
column_b  (int)

Primary Key -> column_a, column_b

如果您想通过column_b简单地添加 index:进行搜索column_b

由于表使用了 Innodb 引擎,所以 PK 会存在于column_b索引中。mysql就能使用索引(using index)。无需创建索引column_b, column_a,因为这将是多余的。- 请记住,inndob 集群按 PK 和所有索引都引用 PK。

对于这种设计,代理键是一个糟糕的选择,因为必须进行额外的工作以确保column_a, column_b不存在。

于 2012-12-29T13:59:33.593 回答