如果你能根据你的经验帮助我回答这些问题
1-如果我为 5 列创建了单独的索引
用户名、国家/地区、创建时间、评论、状态
并在 where 子句 username=''、country = '' 和 comments = '' 中使用了许多列
sql 会对这 3 列使用索引吗?因为每个都有自己的索引。
2-如果我有多列索引“用户名,国家/地区,created_at,评论,状态”
我使用了 2 列,其中 username = '' 和 status = ''
我知道它会使用用户名,但它也会使用索引来获取状态吗?
最佳答案
MySQL 几乎从不在单个查询中使用 2 个索引。 (也就是说,优化器几乎从不选择“索引合并”。)
在适当的情况下,“复合”(多列)索引比两个单独的索引更好。
WHERE username = '...' and country = '...' and comment = '...'
通常会受益
INDEX(username, country, comments) -- in any order
为此WHERE
, INDEX(username, country, created_at, comment, status)
将仅使用前两列。 (除非它是“覆盖”。)
WHERE username = '' and status = ''
将从开始以两者 username
开始的任何索引中受益和status
按任一顺序。它将部分受益于上面的 5 列复合索引 - 第一列 username
。它将使用 status
仅当“覆盖”时。
“覆盖”索引是包含 SELECT
中任何地方使用的所有列的索引。询问。在 INDEX
中以正确的顺序排列正确的列比“覆盖”更重要。
这是my discussion关于如何创建最佳索引。
关于Mysql关于多列分离索引的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50254747/