Mysql查询执行计划有缓存吗?

时间:2015-09-20 19:47:31

标签: php mysql caching sql-execution-plan

我到处寻找我的问题,但没有找到确切的答案。 数据库:MySQL 给定三个数字字段a,b,c和一个日期时间字段d,所有都单独索引 涉及的表格持有10密耳。记录。

两个数字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

这也导致了对生产环境的合并索引查询 对我来说基本上意味着某处有一个执行计划缓存,我无法弄清楚我的生活在哪里清除缓存(如果确实有缓存)

我需要知道如何告诉生产环境在第一个语句中正确使用该索引。

作为注释......出于某种原因,解释查询告诉我d是解释查询时用于生产的索引。

1 个答案:

答案 0 :(得分:1)

  

我需要知道如何告诉生产环境在第一个语句中正确使用该索引。

使用“强制索引”语法。

如果您粘贴CREATE TABLE&表格的EXPLAIN输出&在dev和amp;上涉及的查询(相应)生产我们可以将其缩小到几个方面。可能还有助于了解每台机器上的RAM。

ps:

  

在我的开发环境中,我总是得到一个索引合并,这使得查询速度很快,即使它出于某些原因我还没有真正关心的文件。

按d排序,不在索引中