MySQL:复合主键,关系表的唯一和简单索引

时间:2015-12-12 10:54:06

标签: mysql

我已阅读了大量答案,但尚未找到解释。我想知道如何在特定的表上正确设置索引。

我有关系表连接两个其他表并且还包含一些数据:

Allocation table

enter image description here

我想知道如何根据以下几点正确设置索引:

  • id列是必需的(因为我使用的是需要id主键的Laravel框架。)

  • room_idchannel_iddate需要是唯一的,因为3一起代表该行。

  • room_idchannel_id是外键。

  • 必须将date列编入索引作为其常用搜索列。

我想出了这个,但我很确定它是多余的和错误的:

  • 复合主键:idroom_idchannel_id
  • 复合唯一索引:room_idchannel_iddate
  • index:room_id
  • index:channel_id
  • index:date

其他问题:date是否需要成为复合主键的一部分?

想知道正确设置主键,索引和唯一身份的热点。

1 个答案:

答案 0 :(得分:1)

这就是我要做的就是满足你的需求:

  • 主键:id
  • index:room_id
  • index:channel_id
  • 唯一索引:dateroom_idchannel_id

说明:

  1. id是自动增量,因此对于PK来说就足够了。
  2. 如果room_id位于首位,
  3. channel_idid在PK中无用。
  4. 每个索引都包含PK。所以PK应该尽可能小。
  5. 如果唯一索引以date开头,则可以将其用于日期搜索。因此,不需要单独的date索引。