Подтвердить что ты не робот

Подзапросы, кэшированные 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)
4b9b3361

Ответ 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.