Как поменять местами строки в таблице?

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

&quot писал(а):два одинаковых SELECT'a могут дать result set, в которых порядок следования строк разный.
Не будет такого :) Строки будут выдаваться в порядке их физического расположения в таблице. Но вот серия последовательных Insert'ов не гарантирует того, что физически записи в таблице будут располагаться в той же последовательности.
Даже самый дурацкий замысел можно воплотить мастерски
alexander.spb
Сообщения: 22
Зарегистрирован: 24 мар 2009, 13:25
Откуда: St.Petersburg

а физические расположение вполне может измениться в результате, например, сборки мусора в database.
Laba
Сообщения: 35
Зарегистрирован: 24 мар 2009, 17:47

AiK писал(а):Не будет такого :) Строки будут выдаваться в порядке их физического расположения в таблице. Но вот серия последовательных Insert'ов не гарантирует того, что физически записи в таблице будут располагаться в той же последовательности.
Один_и_тот_же! select без order by может возвращает разный record set. Это закон. :)

Частный случай, что строки в наборе упорядочены по _физическому_расположению_ Считать так плохая практика.

Большинство современных субд имеют кэш для блоков с данными. Кроме того они ориентированы на одновременную работу с несколькими пользователями. И вопросы оптимизации производительности не покидают головы разработчиков и админов. :p

Ситуация когда два сеанса работают с одним и тем же набором данных идеальна для кеширования.

Надеюсь понятно, что есть случаи когда по запросу select без order by впервую очередь выдаются записи из кешированного блока, а затем из только что прочитанного.

Но! тут же делаем этот запрос второй раз и... порядок меняется, блоки ведь уже кешированы в памяти. Но! может быть в этот интервал второй пользователь уже вытолкнул наши блоки из кеша.... Да хрен его разберет.

О каком порядке по _физическому_расположению_ идет речь?
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

&quot писал(а):О каком порядке по _физическому_расположению_ идет речь?
молодой человек, Вы что-нибуть слышали о кластерных индексах?
Даже самый дурацкий замысел можно воплотить мастерски
Laba
Сообщения: 35
Зарегистрирован: 24 мар 2009, 17:47

AiK писал(а):молодой человек, Вы что-нибуть слышали о кластерных индексах?
Да. Слышал.
ustas
Сообщения: 5
Зарегистрирован: 24 июл 2009, 18:23

если нужно разово все упорядочить, то делается так:

1. create table temporary as select * from исходная таблица
2. truncate table где упорядочиваем
3. инсертим записи в нужном порядке в усеченную таблицу
4. drop table temporary

это самый тру способ :)
Ответить