Tom*_*Tom 100 mysql sql database indexing performance
我面临以下问题,我不确定最佳做法是什么.
考虑下表(会变大):
id PK | giver_id FK | recipient_id FK | 日期
我正在使用InnoDB,根据我的理解,它会自动为两个外键列创建索引.但是,我还要做很多查询,我需要匹配以下特定组合:
SELECT...WHERE giver_id = x AND recipient_id = t.
每个这样的组合在表中都是唯一的.
在这些列上添加两列索引是否有任何好处,或理论上两个单独的索引是否足够/相同?
Mar*_*ers 116
如果您有两个单列索引,则在您的示例中将只使用其中一个索引.
如果您有一个包含两列的索引,则查询可能会更快(您应该测量).两列索引也可以用作单列索引,但仅适用于首先列出的列.
有时在(A,B)上有索引而在(B)上有另一个索引.这使得查询快速使用其中一个或两个列,但当然也使用更多的磁盘空间.
选择索引时,还需要考虑插入,删除和更新的影响.更多索引=更新速度更慢.
OMG*_*ies 27
覆盖指数如:
ALTER TABLE your_table ADD INDEX (giver_id, recipient_id);
Run Code Online (Sandbox Code Playgroud)
...将意味着如果查询中提到的索引可以使用giver_id,或组合giver_id和recipient_id.请注意,索引标准是最基础的 - 只是recipient_id在我提供的语句中不能使用覆盖索引的查询.
此外,MySQL每个SELECT只能使用一个索引,因此覆盖索引将是优化查询的最佳方法.
| 归档时间: |
|
| 查看次数: |
49679 次 |
| 最近记录: |