当在WHERE子句中使用时,MySQL是否缓存了子查询?

时间:2012-08-08 15:58:09

标签: mysql sql sql-server database optimization

在以下查询中:

SELECT column_a, column_b FROM table_a WHERE
    column_b IN (SELECT b_id FROM table_b)

是否由SQL解析器缓存子查询SELECT b_id FROM table_b,或者事先执行查询会更快,将其保存为变量(例如,在PHP中),然后将这些值作为CSV传递字符串?

e.g。

SELECT column_a, column_b FROM table_a WHERE
    column_b IN (1,3,4,6,8,10,16,18)

1 个答案:

答案 0 :(得分:6)

使用EXPLAIN EXTENDED来充分说明子查询所产生的影响。

例如:

EXPLAIN EXTENDED
SELECT column_a, column_b FROM table_a WHERE
    column_b IN (SELECT b_id FROM table_b)

如果他们没有产生您希望的缓存结果,您可能有兴趣将它们存储在内存中(memcacheredis),存档(使用PHP file libraries)或者一个单独的SQL缓存本身。