繁体   English   中英

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

[英]Mysql query execution plan has caching?

我到处寻找我的问题,但没有找到确切的答案。 数据库: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

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

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

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

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

使用“强制索引”语法。

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

PS:

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

按d排序,不在索引中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM