Я только что узнал о временных таблицах, и использование их дало мне некоторые действительно хорошие скорости в некоторых моих больших запросах.Создание и использование временных таблиц
Проблема заключается в том, что когда я создаю таблицу, она не длится для полной длины следующего запроса, который использует его, или до конца скрипта.
Я создаю его с помощью:
$dbh->exec("CREATE TEMPORARY TABLE _temp_unique_invoice_ref ENGINE = MEMORY AS
(SELECT jobRef, invoiceRef FROM invoices_out_reference GROUP BY invoiceRef)") ;
запросе после того, как она давно несколько сот строк и пытается воспользоваться временной таблицей много раз в подзапросах, но он работает только для первого подзапроса и остальная часть запроса не отвечает, что таблица не существует.
Сценарий также осложняется тем фактом, что этот запрос будет запускаться каждые 10 секунд потенциально многими пользователями, поэтому он может выполняться много раз до истечения 10 секунд.
Как я могу сделать эту работу, не используя ключевое слово TEMPORARY, и т.д. и т. Д.?
Следующий запрос - это только один большой запрос. Подготовить вызывается на том же объекте, так что это может вызвать новое соединение? Будет ли он работать, если я поставлю синтаксис create table в начале более крупного запроса и завершаю его;?
Почему вы не собираетесь создавать таблицы (не временные), и как только ваша работа будет выполнена, удалите эту таблицу? – sushil