mysql - MySQL 服务器 8.0.23 不使用索引
问题描述
我有 2 个 MySQL 服务器实例(8.0.23)。一个在我们的舞台环境中运行,另一个在我们的生产环境中运行。它们都创建了相同的索引。我在两者中执行完全相同的查询,但查询计划在我们的开发环境中指示不同的全表扫描,但它在我们的阶段环境中使用一个键。
我正在执行的查询是
select max(ac.customerId),max(c.firstName),max(c.lastName) from account_customers ac
join customers c on c.id = ac.customerId
where ac.lookupAccountId = 123
and c.emailAddress like '%wsadiq%'
group by ac.customerId
order by c.lastName asc;
在这两种情况下,lookupAccountId 和 customerId 上都有一个非唯一键。
当此查询在我们的阶段环境中运行时,执行计划指示服务器使用 lookupAccountId 和 customerId 上的键。但是,当在生产实例上运行此查询时,服务器会执行全表扫描,而不是使用 lookupAccountId。
知道为什么会这样,我可以做些什么来确保服务器使用 lookupAccountId 键?
提前致谢。
解决方案
推荐阅读
- python - 当主线程调用 sys.exit() 时,守护线程是否被杀死?
- maven - 为什么我需要在 jar 文件中查找未包含在 maven pom.xml 文件中的类?
- php - Cron 命令在给定的 url 上运行控制器功能?
- javascript - 如何确保命令序列按顺序运行(jQuery 中的超时问题 - Qualtrics)
- java - 如何在 webssoprofileoption 中将 forceAuthn 设置为 true?
- c# - 如何使用 IEqualityComparer 加快多个字段的比较?
- webpack - 带有popper的引导工具提示无法通过webpack工作
- macos - 无法启动为 App Store 提交上传的 MAC 应用程序
- python - 圆形 Python 列表项,每个项都有不同的小数位
- jenkins - 如何在流水线脚本中使用 Jenkins 节点环境变量?