【发布时间】:2011-01-21 22:21:15
【问题描述】:
我面临以下问题,但我不确定最佳做法是什么。
考虑下表(它会变大):
ID PK | giver_id FK |收件人 ID FK |日期
我正在使用 InnoDB,据我了解,它会自动为两个外键列创建索引。但是,我也会在需要匹配以下特定组合的地方进行大量查询:
SELECT...WHERE giver_id = x AND recipient_id = t.
每个这样的组合在表中都是唯一的。
在这些列上添加两列索引是否有任何好处,或者理论上两个单独的索引是否足够/相同?
【问题讨论】:
-
如果两列的组合是唯一的,您可以创建一个具有独特功能的两列索引,这不仅可以提高查询速度,还可以增加表的一致性。
-
"MySQL 可以将多列索引用于测试索引中所有列的查询,或者只测试第一列、前两列、前三列等的查询。如果您在索引定义中以正确的顺序指定列,则单个复合索引可以加快同一张表上的多种查询。” - Multiple-Column Indexes
-
推断@user1585784;如果两列的组合是唯一的,我认为应该为它们使用唯一的键。事实上,如果要在数据库级别强制执行唯一性,唯一键是最简单的方法......
标签: sql mysql database performance indexing