Индекс передачи к временной таблице с постоянного столика?

Я составляю временную таблицу с запросом как это:

CREATE TEMPORARY TABLE temp_table
SELECT * FROM regular_table
WHERE 1

Но regular_table имеет ПОЛНОТЕКСТОВЫЙ ИНДЕКС на некоторых полях. Я пытаюсь сделать ПОЛНОТЕКСТОВЫЙ ПОИСК на новой временной таблице, и я добираюсь, ошибка при сообщении мне "Не может найти ПОЛНОТЕКСТОВЫЙ ИНДЕКС, соответствующий списку столбцов". Таким образом, очевидно, индекс не копирует в новую таблицу. Существует ли способ вызвать это?

Спасибо.

5
задан JD Isaacks 19 July 2010 в 14:15
поделиться

2 ответа

Вы можете использовать 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.

10
ответ дан 18 December 2019 в 16:34
поделиться

Временная таблица точно такая же, как и любая другая таблица, за исключением того, что она будет удалена в конце сессии. Единственный способ иметь такие же индексы (из базы данных) - это создать их для таблицы, как и для любой другой таблицы.

Теперь есть небольшой хак. Вы можете скопировать физические файлы на диск под новым именем и получить клон таблицы, включающий индексы, но я предполагаю, что вы делаете это в приложении, так что это может быть не очень практично.

2
ответ дан 18 December 2019 в 16:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: