MySQL查询缓存内部查询

时间:2013-07-20 14:12:56

标签: mysql sql database

我有一个包含许多嵌套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是否可以缓存查询各个部分的结果?

1 个答案:

答案 0 :(得分:0)

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

相关问题