mysql - 数据库和多列索引 (mySQL)

标签 mysql indexing

我正在处理一个看起来有很多索引的表——实际上有 8 个。但是其中一些似乎是多余的,例如,这是其中的一些索引:

type     columns
-----    ------------------------------
index    project_id
unique   project_id, user_id, event_id
index    project_id, user_id, type, subtype

现在,据我所知,唯一键是必需的,因为它可以防止重复这三个键的组合,而我们需要它。但是,第一个索引不是不必要的吗?

我做了一个快速的 select * from activities where project_id = 5579 并且它使用了包含 4 列的索引(基于 Explain )。对于另一个查询,只需更改 project_id,它就使用了唯一索引。是否会出现仍然使用第一个索引的情况,或者我可以安全地删除它吗?

这种情况也适用于 user_id 列 - 它由自身索引,然后在其第一列处具有多列索引。

我的理解是更多索引 = 更慢的插入,所以我认为我应该尝试删除不必要的索引。

最佳答案

索引 project_id, user_id, type, subtype 涵盖了 WHERE 或 GROUP BY 仅指定 project_id 本身的情况。

关于mysql - 数据库和多列索引 (mySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046365/

相关文章:

mysql - LinkedIn 用户 ID 长度

python - 查找一个列表的任何元素在另一个列表中出现的索引

python - numpy 数组索引 : list index and np. 数组索引给出不同的结果

python - 在 numpy 数组中索引日期时间对象

php - 如何在 PHP 中减去两个日期并在没有交互的情况下发送自动电子邮件

mysql - 选择每个组中的倒数第二条记录

mysql - ReferenceError & d3plus 未定义

php - 错误 : 'mysql has gone away' 中的情况

python - 每第 n 行 Pandas iloc 复杂切片

algorithm - 如何只对 Haskell 中的奇数索引做某事?