Я составляю временную таблицу с запросом как это:
CREATE TEMPORARY TABLE temp_table
SELECT * FROM regular_table
WHERE 1
Но regular_table имеет ПОЛНОТЕКСТОВЫЙ ИНДЕКС на некоторых полях. Я пытаюсь сделать ПОЛНОТЕКСТОВЫЙ ПОИСК на новой временной таблице, и я добираюсь, ошибка при сообщении мне "Не может найти ПОЛНОТЕКСТОВЫЙ ИНДЕКС, соответствующий списку столбцов". Таким образом, очевидно, индекс не копирует в новую таблицу. Существует ли способ вызвать это?
Спасибо.
Вы можете использовать CREATE TEMPORARY TABLE temp_table LIKE regular_table
, но это создаст все индексы, поэтому когда вы сделаете INSERT INTO temp_table SELECT * FROM regular_table
, индексы будут перестроены - что может занять много времени.
Или вы можете создать таблицу и добавить индекс после этого:
CREATE TEMPORARY TABLE temp_table
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz)
INSERT INTO temp_table SELECT * FROM regular_table
но индекс будет, опять же, обновляться при каждой вставке.
Возможно, самым эффективным способом будет создание временной таблицы, вставка всех данных, построение индекса после этого:
CREATE TEMPORARY TABLE temp_table
ALTER TABLE temp_table ADD FULLTEXT INDEX (foo,bar,baz)
ALTER TABLE temp_table DISABLE KEYS
INSERT INTO temp_table SELECT * FROM regular_table
ALTER TABLE temp_table ENABLE KEYS
Опять же, вам придется ждать, пока индекс будет построен, но это произойдет одним куском, с последним оператором ALTER.
Временная таблица точно такая же, как и любая другая таблица, за исключением того, что она будет удалена в конце сессии. Единственный способ иметь такие же индексы (из базы данных) - это создать их для таблицы, как и для любой другой таблицы.
Теперь есть небольшой хак. Вы можете скопировать физические файлы на диск под новым именем и получить клон таблицы, включающий индексы, но я предполагаю, что вы делаете это в приложении, так что это может быть не очень практично.