sql - MySQL 中的两个单列索引与一个两列索引?

标签 sql mysql database performance indexing

我面临以下问题,我不确定最佳做法是什么。

考虑下表(它会变大):

ID PK | giver_id FK |收件人 ID FK |日期

我正在使用 InnoDB,据我了解,它会自动为两个外键列创建索引。但是,我也会做很多查询,我需要匹配以下特定组合:

SELECT...WHERE giver_id = x AND recipient_id = t

每个这样的组合在表中都是唯一的。

在这些列上添加两列索引是否有任何好处,或者理论上两个单独的索引是否足够/相同?

最佳答案

如果您有两个单列索引,则在您的示例中只使用其中一个。

如果您有一个包含两列的索引,则查询可能会更快(您应该衡量)。两列索引也可以用作单列索引,但仅适用于首先列出的列。

有时在 (A,B) 上有一个索引,在 (B) 上有另一个索引会很有用。这使得使用其中一列或两列的查询速度更快,但当然也会占用更多磁盘空间。

在选择索引时,还需要考虑插入、删除和更新的效果。更多索引 = 更慢的更新。

关于sql - MySQL 中的两个单列索引与一个两列索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2349817/

相关文章:

mysql删除重复项

database - 基于工作流的系统的数据库设计

sql - SQL中连续重复值的计数

mysql - 如何在不授予 INSERT 权限的情况下在 dplyr 中创建 left_join(..., copy=TRUE)

python - 在 Django 中保存模型给我 "Warning: Field ' id' 没有默认值”

带数据库的 Java 套接字

php - 使用字符串长度作为条件选择一条记录。尝试过 LEN()、LENGTH() 和 CHAR_LENGTH

sql - 是否可以在没有 sql server 代理的情况下自动运行存储过程?

SQL泛化/特化、数据冗余

java - JPA调用存储过程从2 db中选择数据