У меня есть данные, разбитые по нескольким таблицам mysql, чтобы предотвратить дублирование данных, но присоединение к ним происходит слишком медленно, когда я на самом деле иду обслуживать данные.Таким образом, я создаю намного меньшую таблицу кеша данных, которая, вероятно, потребуется в ближайшем будущем (некоторые данные имеют отношение только к небольшому временному интервалу, поэтому целые таблицы составляют ~ 700 000 строк, а кэш - ~ 6000).
При построении этого кэша используется временная таблица перед копированием в фактическую таблицу кеша, так что, пока таблица создается каждую ночь, таблица живого кеша не отключается.Иногда таблица кеша создается за 30 минут, но иногда она застревает и никогда не завершится.В списке процессов он просто говорит Copying to tmp table
, но будет вращаться в течение нескольких дней, если я позволю.
Что я могу сделать, чтобы предотвратить застревание в Copying to tmp table
?Я осмотрелся и нигде в Интернете не могу найти очень четкого ответа на причины этого, за исключением некоторой информации здесь , которой я пытался следовать, но безрезультатно.
Я бы подумал, что для меня мог бы быть лучший способ построить таблицу, а не адресную память, поскольку итоговая таблица имеет небольшие строки (хотя каждая строка довольно большая).Общая форма запроса компоновки для создания таблицы кэша:
Select col1,col2,col3... FROM tbl1 INNER JOIN tbl2 on ... INNER JOIN tbl3 on ...
LEFT JOIN (SELECT col4, col5, col6... FROM tbl4 INNER JOIN tbl5 on ...)
AS tbl6 on ... WHERE col2 > NOW() ORDER BY col3, col4
Требуется левое соединение, так как я хочу иметь копии данных во внутреннем выделении, если оно существует, но не хочуограничьте его, если это не так.
Извините, если этого недостаточно, но если у кого-то есть идеи, как предотвратить Copying to tmp table
, я был бы очень признателен.