我已经在各处寻找解决方案,但没有找到确定的答案。 数据库:MySQL 给定三个数字字段a、b、c和一个日期时间字段d,都单独索引 参与的表中有1000万条记录。
两个数字n、m
我有一个基本查询:
select * where (a=n or b=n) and c IN(m) Order by d DESC
(n可以是任何数字,m可以是1-9中的任何数字) 我对它们每个都有一个单独的索引。我尝试了ac和bc的索引,但没有成功。
在我的开发环境中,我总是得到一个索引合并,这使得查询快速,即使出于某种原因进行文件排序,我也不太关心。
但在生产环境(不同的服务器-相同的模式/数据)中,无论我做什么,都不会发生这种情况。
我的解决方法是将查询转换为以下语句:
select * where (a=n or b=n) and c IN(m) ORDER BY d desc
致:
select * where (a=n or b=n) and c IN(m,'m') ORDER BY d desc
这导致了生产环境上的合并索引查询,对我来说基本意味着某处有一个执行计划缓存,但我无论如何都找不到清除该缓存的方法(如果确实存在的话)。
我需要知道如何告诉生产环境在第一条语句中正确使用该索引。
需要注意的是...由于某种原因,Explain查询告诉我,在解释查询时在生产环境中使用了d索引。