MYSQL Innodb:复合主键和反向搜索

时间:2012-12-27 05:29:19

标签: mysql innodb composite-primary-key

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

表Event_Users

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聚集索引的指导和帮助都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

MySQL应该能够使用PK中的字段作为覆盖索引而不需要复合二级索引。

因此:

表格(发动机= INNODB)

column_a  (int)
column_b  (int)

Primary Key -> column_a, column_b

如果您想按column_b进行搜索,只需添加索引:column_b

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

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