在以下查询中:
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)
答案 0 :(得分:6)
使用EXPLAIN EXTENDED
来充分说明子查询所产生的影响。
例如:
EXPLAIN EXTENDED
SELECT column_a, column_b FROM table_a WHERE
column_b IN (SELECT b_id FROM table_b)
如果他们没有产生您希望的缓存结果,您可能有兴趣将它们存储在内存中(memcache,redis),存档(使用PHP file libraries)或者一个单独的SQL缓存本身。