我还应该索引PRIMARY KEY中包含的列吗?

gna*_*arf 4 mysql indexing database-design primary-key

这个问题突然浮现在我脑海中......我有一张桌子,根据他们的身份证将两张桌子绑在一起.该CREATE TABLE如下所示:

CREATE TABLE `ticket_contact` (
        `ticket_id` INT NOT NULL,
        `entity_id` INT NOT NULL,
        `notify` INT NOT NULL DEFAULT 0,
        PRIMARY KEY (`ticket_id`, `entity_id`),
        KEY `ticket_id` (`ticket_id`),
        KEY `entity_id` (`entity_id`)
      )
Run Code Online (Sandbox Code Playgroud)

我想知道是否有必要包括最后两KEY行.它会通过以下查询提高我的速度,还是会PRIMARY KEY自动将索引中的各个列编入索引?

SELECT * FROM ticket_contact WHERE ticket_id=1;
SELECT * FROM ticket_contact WHERE entity_id=1;
Run Code Online (Sandbox Code Playgroud)

bob*_*nce 9

创建的索引PRIMARY KEY与任何其他(可能是复合的)UNIQUE索引相同.因此,您不需要创建单独的索引,ticket_id因为它包含在(ticket_id, entity_id)索引中的主列中.

entity_id如果您经常使用该列独立执行查询,您可能希望创建一个单独的索引ticket_id.