首页 > 解决方案 > 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 键?

提前致谢。

标签: mysql

解决方案


推荐阅读