mysql - 用于连接的mysql索引列顺序
问题描述
我有两个表(请求,结果)
要求:电子邮件
结果:电子邮件,已处理_at
我现在想获取所有具有相同电子邮件请求且尚未处理的结果:
SELECT * FROM results
INNER JOIN requests ON requests.email = results.email
AND results.processed_at IS NULL
我在每个单独的列上都有一个索引,但是查询很慢。所以我假设我需要一个关于结果的多列索引:
我只是不确定列必须是什么顺序:
ALTER TABLE results
ADD INDEX results_email_processed_at (email,processed_at)
ALGORITHM=INPLACE LOCK=NONE;
或者
ALTER TABLE results
ADD INDEX results_processed_at_email (processed_at,email)
ALGORITHM=INPLACE LOCK=NONE;
解决方案
任何一个综合指数都将同样有益。
但是,如果您要获取表的 40%,那么优化器可能会选择忽略任何索引并简单地扫描表。
那SELECT
是实际的查询吗?如果没有,请向我们展示实际查询;一些看似很小的更改可能会对优化选项产生很大影响。
请提供EXPLAIN SELECT ...
,以便我们可以看到它对当前索引的看法。SHOW CREATE TABLE
如果存在相关的数据类型问题,请提供。
推荐阅读
- c# - 在 Windows 10 中获取公历日期而不是回历日期
- cookies - 设置了没有“SameSite”属性的 cookie。...但我做到了
- python - 创建作业或管道以运行使用 pandas_gbq 摄取 big_query 表的脚本的最佳选择是什么?
- javascript - 如何通过在 ComponentDidMount() 中调用的函数访问状态集
- pandas - 美丽的汤提取行和数据
- sql - 替代 QUICK SIGHT 中的 CONTAINS 函数
- postgresql - 普希金无法初始化 PostgreSQL 数据库
- unit-testing - Mockito 单元测试 lombok.extern.slf4j @Slf4j 注释日志?
- django - 模板标签未在 HTML 中呈现
- c - 对数计算器