Вставить в vs выбрать в



в чем разница между использованием



SELECT ... INTO MyTable FROM...


и



INSERT INTO MyTable (...)
SELECT ... FROM ....


?



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




  1. какое утверждение является более предпочтительным?

  2. есть ли другие последствия для производительности?

  3. что такое хороший вариант использования для выбора...В течение вставить ...?


Edit: я уже заявил, что знаю, что это выбрать В... создает таблицу, в которой она не существует. Я хочу знать, что SQL включает этот оператор по какой-то причине, что это такое? Он что-то делает за кулисами, для вставки строк, или это просто синтаксический сахар поверх CREATE TABLE и INSERT INTO.

546   10  

10 ответов:

  1. они делают разные вещи. Используйте INSERT когда таблица существует. Используйте SELECT INTO когда это не так.

  2. да. INSERT без табличных подсказок обычно регистрируется. SELECT INTO минимально регистрируется при условии, что установлены правильные флаги трассировки.

  3. по моему опыту SELECT INTO чаще всего используется с промежуточными наборами данных, например #temp таблицы, или скопировать всю таблицу, как для резервного копирования. INSERT INTO используется, когда вы вставить в существующую таблицу с известной структурой.

EDIT

чтобы обратиться к вашему редактированию, они делают разные вещи. Если вы делаете таблицу и хотите определить структуру использования CREATE TABLE и INSERT. Пример проблемы, которую можно создать: у вас есть небольшая таблица с полем varchar. Самая большая строка в вашей таблице теперь составляет 12 байт. Ваш реальный набор данных потребует до 200 байт. Если вы это сделаете SELECT INTO от вашего маленького стола к сделайте новый, более поздний INSERT завершается с ошибкой усечения, потому что ваши поля слишком малы.

  1. какое утверждение является более предпочтительным? зависит от того, что вы делаете.

  2. есть ли другие последствия для производительности? если таблица является постоянной таблицей, вы можете создавать индексы во время создания таблицы, что имеет последствия для производительности как отрицательно, так и положительно. Select into не воссоздает индексы, существующие в текущих таблицах, и поэтому последующее использование таблицы может быть медленнее, чем это необходимо быть.

  3. что такое хороший вариант использования для выбора...В течение вставить ...? Select into используется, если вы не знаете структуру таблицы заранее. Это быстрее написать, чем создать таблицу и вставить staetment, поэтому он используется для ускорения разработки в разы. Это часто быстрее использовать, когда вы создаете быструю временную таблицу для тестирования вещей или резервную таблицу конкретного запроса (возможно, записи, которые вы собираетесь удалить). Он должен быть редким, чтобы увидеть его использование в производственный код, который будет выполняться несколько раз (за исключением временных таблиц), потому что это будет ошибкой, если таблица уже существует.

он иногда используется неуместно людьми, которые не знают, что они делают. И они могут вызвать хаос в БД в результате. Я сильно чувствую, что нецелесообразно использовать SELECT INTO для чего-либо ,кроме одноразовой таблицы (временная резервная копия, временная таблица, которая исчезнет в конце сохраненного процесса и т. д.). Постоянный таблицы нужны думал что касается их дизайна и выбора, позволяет легко избегать думать о чем-либо даже таком базовом, как какие столбцы и какие типы данных.

В общем, я предпочитаю использовать инструкцию create table и insert - у вас больше контроля, и это лучше для повторяемых процессов. Кроме того, если таблица является постоянной таблицей, она должна быть создана из отдельного скрипта create table (который находится в системе управления версиями), поскольку создание постоянных объектов должно нет, в общем, быть в коде, который вставляет / удаляет / обновляет или выбирает из таблицы. Изменения объектов должны обрабатываться отдельно от изменений данных, поскольку объекты имеют последствия, выходящие за рамки потребностей конкретной вставки/обновления/выбора/удаления. Вам нужно рассмотреть лучшие типы данных, вам нужно подумать об ограничениях FK и PKs и других ограничениях, вам нужно рассмотреть требования к аудиту, вам нужно подумать об индексации и т. д.

основное различие заключается в том, что SELECT INTO MyTable создаст новую таблицу с именем MyTable с результатами, в то время как INSERT INTO требует, чтобы MyTable уже существовал.

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

В общем, SELECT INTO используется чаще для одной задачи, в то время как INSERT INTO используется регулярно для добавления строк в таблицы.

EDIT:
Хотя вы можете использовать CREATE TABLE и INSERT INTO для выполнения того, что делает SELECT INTO, с SELECT INTO вам не нужно заранее знать определение таблицы. SELECT INTO, вероятно, включен в SQL, потому что он упрощает такие задачи, как специальная отчетность или копирование таблиц.

каждый оператор имеет отдельный случай использования. Они не взаимозаменяемы.

SELECT...INTO MyTable... создает новый MyTable где раньше не было.

INSERT INTO MyTable...SELECT... используется, когда MyTable уже существует.

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

в отношении вашего редактирования:

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

SELECT INTO обычно используется для создания временных таблиц или копирования другой таблицы (данных и/или структуры).

в повседневном коде вы используете INSERT, потому что ваши таблицы уже должны существовать для чтения, обновления, удаления, присоединения и т. д. Примечание: ключевое слово INTO является необязательным с INSERT

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

A таблица, созданная SELECT INTO, не будет иметь ключей или индексов или ограничений в отличие от реальной, сохраненной, уже существующей таблицы

2 не являются непосредственно сопоставимыми, потому что они почти не пересекаются в использовании

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

Я только хочу осветить второй пункт вопроса, который связан с производительностью, потому что ни один орган еще не охватил это. Select Into намного быстрее, чем insert into, когда речь заходит о таблицах с большими наборами данных. Я предпочитаю выбирать, когда мне нужно читать очень большую таблицу. вставка в таблицу с 10 миллионами строк может занять несколько часов, в то время как select into сделает это за считанные минуты, а что касается потери индексов в новой таблице, вы можете воссоздать индексы по запросу и все еще можете сэкономьте намного больше времени по сравнению с insert into.

простая разница между select Into и Insert Into является: -- >Выберите в не нужна существующая таблица. Если вы хотите скопировать данные таблицы A, вы просто набираете Select * в [tablename] из A. здесь tablename может быть существующей таблицей или будет создана новая таблица, которая имеет такую же структуру, как таблица A.

--> вставить в существующую таблицу.Вставить в [tablename] выберите * из A;. Здесь tablename-это существующая таблица.

Select Into обычно более популярен для копирования данные, особенно резервные данные.

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

вставка представления мудрая в быстра.

ссылки :

https://www.w3schools.com/sql/sql_insert_into_select.asp https://www.w3schools.com/sql/sql_select_into.asp

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

SELECT * INTO table

поскольку это создает одну большую транзакцию и создает блокировку схемы для создания объекта, не позволяя другим пользователям создавать объект или получать доступ к системным объектам до SELECT INTO операция завершается.

в качестве доказательства концепции откройте 2 сессии, в первой сессии попробуйте использовать

select into temp table from a huge table 

а во втором разделе попробуй

create a temp table 

и проверьте блокировки, блокировку и продолжительность второго сеанса для создания объекта временной таблицы. Моя рекомендация всегда рекомендуется создавать и вставлять оператор, а при необходимости для минимального ведения журнала использовать флаг трассировки 610.

Comments

    Ничего не найдено.