我正在使用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聚集索引的指导和帮助都将不胜感激。谢谢!
答案 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
尚不存在。