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