Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
user89
Member

Откуда:
Сообщений: 2083
SQL 2008 R2

Результат выборки упорядочивается по дате, фамилии и вставляется в таблицу (с автоинкрементом)
create table #tmp (idx int identity, UserName varchar(500), data date)

insert into #tmp
  select UserName, data from <сложная выборка>
  order by data, UserName

Будет ли следующий запрос 100% гарантировать, что дата и фамилия выведутся на экран тоже упорядоченными?
select * from #tmp
order by idx

Пока эксперименты говорят, что всё ОК, но в реальных условиях - не уверен...
2 июл 14, 10:21    [16247226]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
user89
select * from #tmp
order by idx
  order by data, UserName -- вот ето 100% гарантия ,если не вдаваться в подробности колейшинов
2 июл 14, 10:24    [16247248]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
_human
Member

Откуда:
Сообщений: 566
user89,

вроде как данные никогда не хранятся в таблицах в упорядоченном виде.
Возможно эксперимент говорит о наличии индекса, но это не гарантирует выборку в упорядоченном виде, только ORDER BY
2 июл 14, 10:26    [16247268]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Glory
Member

Откуда:
Сообщений: 104751
http://support.microsoft.com/kb/273586
2 июл 14, 10:31    [16247331]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Бурков
Member

Откуда: Москва
Сообщений: 305
_human
user89,

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


Не вроде как, а так и есть.
В общем, 100% результата не получится
2 июл 14, 10:34    [16247357]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
user89
Member

Откуда:
Сообщений: 2083
Всем спасибо! Стало всё понятно.
2 июл 14, 10:43    [16247435]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
MSSQLBug
Guest
user89,

А вы сходили по ссылке, которую дал Glory?

Там-то написано вот что:

The following INSERT INTO SELECT FROM query with an ORDER BY clause will guarantee
that column ID in NewTable is in the same order as Col1.

INSERT INTO NewTable (Col1, Col2) SELECT Col1, Col2 FROM OldTable ORDER BY Col1 

ID (identity)    Col1     Col2
-------------    ------   ------
1                1         S
2                2         z
3                7         G
4                11        F
5                17        I
2 июл 14, 13:37    [16248744]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Бурков
_human
user89,

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


Не вроде как, а так и есть.

При наличии кластерного индекса данные, конечно, именно что хранятся в упорядоченном виде. А вот что они ВЫВЕДУТСЯ в том же упорядоченном виде в запросе без order by - да, никто не гарантирует.
2 июл 14, 13:41    [16248775]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
MSSQLBug,

т.е. вот ето вы не дочитали ?

автор
Note ID identity column is generated to have same order as of Col1. However, INSERT INTO doesn’t guarantee the physical order of either ID or Col1 in NewTable. To retrieve the data in desired order, an ORDER BY clause is required as shown by following SELECT statement:

SELECT * from NewTable ORDER BY ID
2 июл 14, 13:41    [16248779]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4832
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO 	NewTable
FROM 	OldTable
Order By Col1
2 июл 14, 13:47    [16248834]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
MSSQLBug
Guest
Maxx,

Дочитал, а Вы понимаете, что там написано?

Я переведу: вставка не гарантирует физического порядка записей,
чтобы их вывести в нужном порядке, надо добавить сортировку по ID.

А вот запрос автора:
user89
select * from #tmp
order by idx


Что не так-то?
2 июл 14, 14:15    [16249141]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
ещё в тему:
http://blogs.msdn.com/b/sqltips/archive/2005/07/20/441053.aspx
2 июл 14, 14:47    [16249497]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Кот Матроскин
При наличии кластерного индекса данные, конечно, именно что хранятся в упорядоченном виде.

не обязательно...
2 июл 14, 15:08    [16249736]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Knyazev Alexey
не обязательно...

+1 :)) Легко чекаеться на таблице которая занимает меньше 1 страницы
2 июл 14, 15:09    [16249746]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
_human
Member

Откуда:
Сообщений: 566
судя по ответам, никто не знает как хранятся данные в таблицах при наличии кластерного индекса =))
итог - используйте order by !
2 июл 14, 15:13    [16249801]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Knyazev Alexey
Кот Матроскин
При наличии кластерного индекса данные, конечно, именно что хранятся в упорядоченном виде.

не обязательно...


банальный пример:

--Таблица для тестов
create table t (id int primary key, dt datetime )
go
--Раз строка с id = 1
insert into t
  values( 1, getdate() );
go
--курим 5 сек
waitfor delay '00:00:05';
go
--Два строка с id = 3
insert into t
  values( 3, getdate() );
go

--Ищем нашу страничку с данными
select db_id() [db_id], p.* 
  from t
    cross apply fn_PhysLocCracker(%%physloc%%) p;
go


К сообщению приложен файл. Размер - 2Kb
2 июл 14, 15:24    [16249920]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
--смотрим нашу страницу
dbcc page ( 27, 1, 1043, 3 ) with tableresults;
go


К сообщению приложен файл. Размер - 36Kb
2 июл 14, 15:24    [16249924]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Вставка в таблицу с упорядочиванием. insert order by  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
--Три строка с id = 2
insert into t
  values( 2, getdate() );
go

--смотрим нашу страницу
dbcc page ( 27, 1, 1043, 3 ) with tableresults;
go



По смещению видно, что строки с id = 1 и id = 3 остались там где и были, а строка с id = 2 добавилась в конец...порядок только смещением определяется

К сообщению приложен файл. Размер - 47Kb
2 июл 14, 15:25    [16249938]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить