Как создать TEMPORARY TABLE в MySQL без индексов или ключей? - PullRequest
1 голос
/ 30 октября 2019
CREATE TABLE person (
    firstname varchar(20),
    lastname varchar(20),
    UNIQUE KEY unique_lstanme (lastname)
);

создать временный:

CREATE TEMPORARY TABLE person_tmp LIKE person;
SHOW INDEX FROM person_tmp;

Результат: показывает уникальный ключ. Почему? Я всегда думал, что TEMPORARY таблицы создаются без индексов?

Могу ли я предотвратить это, или мне пришлось бы удалить индекс явно для временной таблицы? Есть ли команда sql, которая может отбросить любые существующие индексы во временной таблице, не называя их?

1 Ответ

2 голосов
/ 30 октября 2019

В mysql временные таблицы могут иметь индексы, а create temporary table ... like ... сохраняет индексы, с этим ничего нельзя поделать.

Использование создание временной таблицы ... выберите ... оператор вместо предложения limit 0, потому что

CREATE TABLE ... SELECT не создает автоматически никаких индексов для вас. Это сделано намеренно, чтобы сделать заявление максимально гибким. Если вы хотите иметь индексы в созданной таблице, вы должны указать их перед оператором SELECT.

Итак, ваш оператор будет выглядеть примерно так:

CREATE TEMPORARY TABLE person_tmp
AS SELECT * FROM person LIMIT 0;
...