Какое утверждение предпочтительнее? Зависит от того, что вы делаете.
Есть ли другие последствия для производительности? Если это постоянная таблица, вы можете создавать индексы во время создания таблицы, что отрицательно и положительно сказывается на производительности. Select into не воссоздает индексы, существующие в текущих таблицах, и поэтому последующее использование таблицы может быть медленнее, чем должно быть.
Как лучше использовать SELECT ... INTO вместо INSERT INTO ...? Select into используется, если вы не знаете структуру таблицы заранее. Это быстрее написать, чем создать таблицу и оператор вставки, поэтому он используется для ускорения разработки в разы. Часто бывает быстрее использовать, когда вы создаете быструю временную таблицу для тестирования или резервную копию определенного запроса (возможно, записи, которые вы собираетесь удалить). Редко можно увидеть его использование в производственном коде, который будет выполняться несколько раз (за исключением временных таблиц), потому что он завершится ошибкой, если таблица уже существует.
Иногда его ненадлежащим образом используют люди, которые не знают, что делают. И в результате они могут вызвать хаос в базе данных. Я категорически считаю неуместным использовать SELECT INTO для чего-либо, кроме одноразовой таблицы (временная резервная копия, временная таблица, которая исчезнет в конце сохраненной процедуры и т. Д.). Постоянные таблицы должны реальные мысли , чтобы их дизайн и SELECT INTO позволяет легко не думать ни о чем даже основные, какие столбцы и какие типы данных.
В общем, я предпочитаю использовать команду create table и insert - у вас больше элементов управления, и это лучше для повторяемых процессов. Кроме того, если таблица является постоянной таблицей, она должна быть создана из отдельного сценария создания таблицы (тот, который находится в системе управления версиями), поскольку создание постоянных объектов, как правило, не должно в коде вставлять / удалять / обновлять или выбирать из стол. Изменения объекта должны обрабатываться отдельно от изменений данных, поскольку объекты имеют последствия, выходящие за рамки потребностей конкретной вставки / обновления / выбора / удаления. Вам необходимо рассмотреть лучшие типы данных, подумать об ограничениях FK, PK и других ограничениях, рассмотреть требования аудита, подумать об индексировании и т. Д.
INSERT INTO
два ключевых слова (select & into), которые дают миру понять, что это не обычный оператор SQL, хотяSELECT ... INTO
начинает, по крайней мере, выглядеть как обычный оператор SQL. Небольшая причина отдать предпочтение первому.