Сложные вложенные запросы и временные таблицы

GrayMaster

Новичок
Сложные вложенные запросы и временные таблицы

Добрый день !
Есть SQL запрос для обработки данных (выполняется редко):
Код:
SET @cur_group = '', @g_counter =1;
INSERT INTO `base`
SELECT
    NULL, 
    `engine_id`, 
    `module_id`, 
    0, 
    NULL, 
    0, 
    NULL, 
    `data`, 
    `data_base`
FROM (
    SELECT
        `new`, 
        `engine_id`, 
        `module_id`, 
        `data`,      
        @g_counter := IF (`data_base` = @cur_group , @g_counter +1, 1) AS `counter` ,
        @cur_group := IF (`data_base` = @cur_group , @cur_group , `data_base`) AS `group`
    FROM (
        SELECT * FROM (
            SELECT '0' AS `new`, `engine_id`, `module_id`, `data`, `data_base` FROM `base`
            WHERE `engine_id`='1'
            UNION ALL
            SELECT '1' AS `new`, `engine_id`, `module_id`, `data`, `data_base` FROM `result` 
            WHERE `id`<='20000' AND `engine_id`='1' AND `p_engine_id`='3'
            ORDER BY `new`
        ) AS `order_new`
        GROUP BY `data`
    ) AS `group_data`
    ORDER BY `data_base`
) AS `counted`
WHERE `new`='1' AND `counter` <= 10
Вопрос состоит в следующем: Есть ли смысл разбивать выполнение этого и подобных запросов на временные таблицы ? Т.е. выолнять не один SQL запрос, а серию, записывая данные в промежуточные таблицы ? При обработке, в таблицах могут быть миллионы записей.

Какие будут плюсы и минусы использования промежуточных врменных таблиц ?

Спасибо.
 

Gas

может по одной?
При запросах вида:
select * from (select * from tbl where [condition_internal]) as t where [condition_external]
не будут использоваться индексы при работе с derived выборкой (condition_external), при использовании же темповых таблиц их там можно построить.

Хотя в данном случае join'ов таких выборок с другими таблицами нет, наверное не страшно.
 

alpine

Новичок
Данные временной таблицы можно использовать несколько раз в течении сессии подключения, а подзапрос выполняется каждый раз и его результаты не кешируются, на сколько мне известно. Этот факт можно использовать для тюнинга серии запросов в которых используются идентичные подзапросы.
 
Сверху