Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 insert as select order by  [new]
Быдло___кодер
Guest
Есть такой запрос написаный кем-то
insert into dest (t1, t2...)
select t1, t2 from source order by id


Вопрос: зачем нужен order by?
Правильно ли я понимаю что это сделано для того чтобы порядок вставки строк соответствовал порядку их физического хранения в кластеризированном индексе по первичному ключу?
11 апр 17, 12:59    [20388918]     Ответить | Цитировать Сообщить модератору
 Re: insert as select order by  [new]
buven
Member

Откуда:
Сообщений: 792
Быдло___кодер
Есть такой запрос написаный кем-то
insert into dest (t1, t2...)
select t1, t2 from source order by id


Вопрос: зачем нужен order by?
Правильно ли я понимаю что это сделано для того чтобы порядок вставки строк соответствовал порядку их физического хранения в кластеризированном индексе по первичному ключу?


Может чтобы ID, которое IDENTITY и на dest и на source, как бы совпадало?
11 апр 17, 13:02    [20388953]     Ответить | Цитировать Сообщить модератору
 Re: insert as select order by  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
Быдло___кодер,

Если есть кластерный индекс - то он как-то отсортирован уже. Хранить будет согласно тому что указано в параметрах индекса.
Кластерный не всегда primary.
Сортировку используют для уменьшения фрагментации индекса, если order by совпадает с порядком в индексе... как-то так

На отдачу это никак не влияет
11 апр 17, 13:04    [20388978]     Ответить | Цитировать Сообщить модератору
 Re: insert as select order by  [new]
o-o
Guest
еще если бы с таблоком вставляли,
то вставка в empty кластерный с order by будет минимально логироваться.
но может они только половину условия помнят
-----
у нас так вставляют те, кто сперва проверял,
что вернул селект (им удобнее отсортированное проверять)
а потом так и оставили, т.к. им все равно, они не понимают, что есть сорт для сервера
11 апр 17, 13:26    [20389143]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: insert as select order by  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 3926
Дальнейшее уточнение по данной теме.

1) Есть INSERT A SELECT ... FROM B ORDER BY C
2) В целевой таблице есть IDENTITY(1,1) , которое автоматически генерится при данной вставке

Есть ли гарантия того, что полученные IDENITY будут возрастать в порядке ORDER BY C?

Будут они идти последовательно или "с дырками", в моём случае несущественно?
18 фев 19, 19:50    [21813667]     Ответить | Цитировать Сообщить модератору
 Re: insert as select order by  [new]
msLex
Member

Откуда:
Сообщений: 6245
a_voronin
Есть ли гарантия того, что полученные IDENITY будут возрастать в порядке ORDER BY C?

Да
18 фев 19, 19:54    [21813673]     Ответить | Цитировать Сообщить модератору
 Re: insert as select order by  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36269
Об этом даже в хелпе написано:

https://docs.microsoft.com/ru-ru/sql/t-sql/statements/insert-transact-sql?view=sql-server-2017
INSERT queries that use SELECT with ORDER BY to populate rows guarantees how identity values are computed but not the order in which the rows are inserted.
18 фев 19, 19:54    [21813674]     Ответить | Цитировать Сообщить модератору
 Re: insert as select order by  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 3926
Гавриленко Сергей Алексеевич
Об этом даже в хелпе написано:

https://docs.microsoft.com/ru-ru/sql/t-sql/statements/insert-transact-sql?view=sql-server-2017
INSERT queries that use SELECT with ORDER BY to populate rows guarantees how identity values are computed but not the order in which the rows are inserted.


Будет аналогичное верно в отношении INSERT сделанного в рамках MERGE?
11 апр 19, 15:27    [21859607]     Ответить | Цитировать Сообщить модератору
 Re: insert as select order by  [new]
msLex
Member

Откуда:
Сообщений: 6245
a_voronin
Гавриленко Сергей Алексеевич
Об этом даже в хелпе написано:

пропущено...


Будет аналогичное верно в отношении INSERT сделанного в рамках MERGE?

а где вы в merge order by добавите?

только если
using (select top ... order by ... )

но это order by для правильного выбора top а не для порядка обработки записей
11 апр 19, 15:33    [21859615]     Ответить | Цитировать Сообщить модератору
 Re: insert as select order by  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6376
a_voronin
Гавриленко Сергей Алексеевич
Об этом даже в хелпе написано:

пропущено...


Будет аналогичное верно в отношении INSERT сделанного в рамках MERGE?

пишут что с ака TOP (SELECT CAST(0x7FFFFFFFFFFFFFFF AS bigint)) будет работать, но без документов :)
11 апр 19, 15:37    [21859618]     Ответить | Цитировать Сообщить модератору
 Re: insert as select order by  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 3926
msLex
только если
using (select top ... order by ... )


Именно сюда
11 апр 19, 15:38    [21859620]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить