繁体   English   中英

内部查询的MySQL查询缓存

[英]MySQL query caching of inner query

我有很多嵌套的SELECT语句的大型查询。 简化版本可能如下所示:

SELECT * FROM tableA WHERE x IN(
   SELECT * FROM tableB WHERE x IN(
       SELECT * FROM tableC WHERE user_id = y
   )
)

最重要的是,最里面的语句通过查看user_id并选择要在其余查询中使用的ID号列表开始。

我遇到的问题是,即使两个用户在tableC中具有相同的数据,其余的查询似乎也不会被缓存。

例如,如果SELECT * FROM tableC WHERE user_id = 1返回(1,2,3,4,5),而SELECT * FROM tableC WHERE user_id = 2也返回(1,2,3,4,5)

如果我使用user_id = 1运行完整查询,则执行时间约为0.007秒。 如果重新运行查询,则执行时间减少了0.002。 如果将user_id更改为2并运行查询,则第一次运行查询时,执行时间将回到0.007。 MySQL是否可以缓存查询各个部分的结果?

看来您使用的是mysql。 因此,当您第一次运行查询'SELECT * FROM tableC WHERE user_id = 1'时,将得到结果'1,2,3,4,5',并且查询进入查询缓存。 因此,第二次运行后的执行时间少于第一次运行。 在这种情况下,您的结果与您的第一个查询相关联。 当您运行第二个查询时,您的服务器对此一无所知。 因此它运行它并返回一些内容(在您的情况下,结果是相同的)。 下次运行第二个查询时,将从查询缓存中获取该查询,并且速度将很快。 无论如何,服务器将在查询缓存中存储两个不同的记录。

暂无
暂无

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

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