Подзапросы, кэшированные MySQL при использовании в предложении WHERE?
В следующем запросе:
SELECT column_a, column_b FROM table_a WHERE
column_b IN (SELECT b_id FROM table_b)
Является ли подзапрос SELECT b_id FROM table_b
кэшированным синтаксическим анализатором SQL, или было бы быстрее выполнить запрос заранее, сохранить его как переменную (например, в PHP), а затем передать эти значения в виде строки CSV?
например.
SELECT column_a, column_b FROM table_a WHERE
column_b IN (1,3,4,6,8,10,16,18)
Ответы
Ответ 1
Посмотрите на использование 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) или в отдельном кэше SQL.