powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Порядок строк в таблице
25 сообщений из 32, страница 1 из 2
Порядок строк в таблице
    #33383714
Здравствуйте!
Простейший вопрос - чем определяется порядок строк в таблице?
То есть если просто делать select * from table
то выйдет упорядоченно как-то (например по кластерному индексу)
или как Бог на душу положит?


Потому что странно - была таблица, поле когда добавлялись
записи, поле ID было с кластерным индексом при выборке без order by
сортировалось по нему. А сейчас что-то перестало -
новые записи то в середине то в начале вообще.
Стоит обращать на это внимание?
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33383728
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трава у домаЗдравствуйте!
Простейший вопрос - чем определяется порядок строк в таблице?
То есть если просто делать select * from table
то выйдет упорядоченно как-то (например по кластерному индексу)
или как Бог на душу положит?


Потому что странно - была таблица, поле когда добавлялись
записи, поле ID было с кластерным индексом при выборке без order by
сортировалось по нему. А сейчас что-то перестало -
новые записи то в середине то в начале вообще.
Стоит обращать на это внимание?
Никакого порядка хранения в таблицы и вывода SELECT-ом записей нет. Как серверу удобно, так он и делает. Получать гарантированно упорядоченные записи можно только одним способом - указанием ORDER BY.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33383740
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трава у дома пишет:
> Простейший вопрос - чем определяется порядок строк в таблице?
> То есть если просто делать select * from table
> то выйдет упорядоченно как-то (например по кластерному индексу)
> или как Бог на душу положит?

Как серверу удобнее. Ни в коем случае нельзя закладываться на такой
порядок. Хочешь упорядоченно - используй order by. Это оговорено и
стандартами и документацией.

> Потому что странно - была таблица, поле когда добавлялись
> записи, поле ID было с кластерным индексом при выборке без order by
> сортировалось по нему. А сейчас что-то перестало -
> новые записи то в середине то в начале вообще.

Ничего странного.

> Стоит обращать на это внимание?

Нет.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33383846
нарушил правила :-(

ASE 12.5.3

В общем вы меня успокоили.
Я на это конечно никогда не полагался, но просто странно
как-то стало - раньше отсортированы были, а теперь вразнобой.
Я и подумал - не случилось ли чего.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33383858
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а может без orde by оно вытаскивается по страницам, соответственно если страница была освобождена и в нее попали новые данные, вот они и вылезли раньше старых
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33384894
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В ASE это зависит от типа таблицы (как она блокируется), если она allpageslock - то все записи должны быть отсортированы по первичному ключу
ДокументацияВ кластерных индексах по таблицам с блокировкой всех страниц страни-
цы листового уровня также являются страницами данных, и все строки
хранятся в физическом порядке согласно значениям ключей.

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

Добиваться упорядочивания по кластерному ключу для таблиц с типом блокирования отличныи от allpageslock можно с помощью параметров управления пространством (например fillfactor) и выполнением команды reorg rebuild.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385008
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Sania пишет:

> В ASE это зависит от типа таблицы (как она блокируется), если она
> allpageslock - то все записи должны быть отсортированы по первичному ключу

Что значит должны? В процитированной документации сказано только про то,
что строки ХРАНЯТСЯ в физическом порядке согласно значениям ключей. А
разве там сказано, что без ORDER BY записи должны выдаваться в том же
порядке, в котором хранятся? Даже если в текущей версии это так, то я
сомневаюсь, что это а) гарантированно, б) останется в дальнейшем так.

Ну нельзя в SQL-серверах закладываться на порядок выдачи без ORDER BY.
Независимо от типов таблиц и прочих факторов, в том числе и типа
SQL-сервера. Просто нельзя и все. Это надо забить себе в голову и забыть
про dbf-прошлое.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385038
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гoлдун wrote:

> Это надо забить себе в голову и забыть про dbf-прошлое.

Предлагаю в описании вакансий писать "_без_ опыта работы с
файл-серверными БД" .
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385115
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокументацияФизическое упорядочение означает следующее:
• Все элементы на странице данных расположены в порядке
индексного ключа.
• Вся таблица может быть прочитана в порядке индексного ключа
благодаря тому, что на каждой странице данных есть указатели
на следующую страницу.

При простом select * from таблица выполняется table scan, при этом данные читаются по страницам, котрые (у таблиц с кластерным ключом и типом блокирования allpages) расположены в порядке кластерного ключа.

Описание работы кластерного индекса довольно объемное, полностью приводить его нет смысла

>Александр Гoлдун
>Даже если в текущей версии это так, то я сомневаюсь, что это а) гарантированно,
Гарантированно.

>б) останется в дальнейшем так.
Это из области домыслов, пока не менялось.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385171
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Sania пишет:

> При простом select * from таблица выполняется table scan,

а если это простой select * from ... where ..., но без order by?

> Описание работы кластерного индекса довольно объемное, полностью
> приводить его нет смысла

Действительно нет смысла. Имею достаточное общее представление.

>>Даже если в текущей версии это так, то я сомневаюсь, что это
>> а) гарантированно,

> Гарантированно.

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

>>б) останется в дальнейшем так.
> Это из области домыслов, пока не менялось.

Я вообще почти полный ноль в ASE, мои познания о нем ограничиваются
опытом работы с его родственником MSSQL 6.5. Но вот про ASA могу точно
сказать, что там уже не так давно (в 8.0 кажется) менялось поведение в
плане выборки без order by. Так почему оно не может поменяться в ASE?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385511
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_SaniaВ ASE это зависит от типа таблицы (как она блокируется), если она allpageslock - то все записи должны быть отсортированы по первичному ключу ...

и то только если он кластерный.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385513
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гoлдун
Что значит должны? В процитированной документации сказано только про то,
что строки ХРАНЯТСЯ в физическом порядке согласно значениям ключей. А
разве там сказано, что без ORDER BY записи должны выдаваться в том же
порядке, в котором хранятся?

Нет, не должны , и это естественно нигде не написано. И порядок хранения и порядок, в котором появляются записи в наборе, выданном SELECT-ом -- совершенно разные вещи.

Например, на том же SELECT * from ATABLE_WITH_CLUSTERED_INDEX
включаем парралелизм, и тут же набор перестает быть отсортированным вообще хоть как то.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385516
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При простом select * from таблица выполняется table scan,

Далеко не факт. И в документации нигде такого не сказано.

при этом данные читаются по страницам, котрые (у таблиц с кластерным ключом и типом блокирования allpages) расположены в порядке кластерного ключа.

Опять-таки , говорю -- включите парралельное выполнение запроса. "Порядок" тут же изчезнет.

Гарантированно.

Это НЕ ГАРАНТИРОВАНО. Александр абсолютно прав. Гарантирован порядок хранения. А то, что запрос выдаст вам записи в порядке хранения - далеко не факт. И это не гарантированно и нигде не оговаривается в документации.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385535
А кстати следует ли из изложенного то, что порядок при выборке без ORDER BY
может в принципе меняться от случая к случаю?
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385540
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трава у домаА кстати следует ли из изложенного то, что порядок при выборке без ORDER BY
может в принципе меняться от случая к случаю?
Естественно.
Кстати, если использовать слова FIRST или TOP X без order by - сервер выдаст предупреждение.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385772
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трава у дома пишет:
> А кстати следует ли из изложенного то, что порядок при выборке без ORDER BY
> может в принципе меняться от случая к случаю?

Так именно об этом тут и твердим! В ASA так вообще два подряд
выполненных SELECT могут выдать разных порядок, даже если данные в
таблице не менялись.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385815
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to MasterZiv

Понятно, про парралелизм то я и забыл, однако он используется редко, и помнится вы же и рекомендовали использовать его крайне осторожно.
Насколько показывает опыт, в обычном режиме происходит выдача данных именно по кластерному ключу и некоторые разработчики под ASE это используют (не я и не в нашей конторе), сомневаюсь, что у "Трава у дома" включен параллелизм, скорее всего, изменили тип блокирования.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385935
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокументацияЕсли это таблица с блокировкой всех страниц, то при сканировании
таблицы или сканировании, использующем кластерный индекс для
просмотра большого количества страниц, страницы данных просмат-
риваются по указателям на следующую страницу, которые есть на
каждой странице.

Честно говоря я всегда думал, что это и гарантирует упорядоченность вывода, теперь уже сам засомневался. С параллельным сканированием, особенно если таблица секционирована, все ясно - порядок не гарантирован, но без него вроде должно быть по порядку.

to MasterZiv
>При простом select * from таблица выполняется table scan,
>Далеко не факт. И в документации нигде такого не сказано.

А в каком случае сервер применит стратегию отличную от table scan?
Может когда есть индекс покрывающий все поля таблицы?
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385966
опишу еще раз:

таблица заполнялась. И при запросе без order by выдавались строки упоредоченно ID-шнику (он кластерный индекс)

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

Исходя из того, что вы все написали наверное похоже на то, что например началась новая страница и записи попадают на нее.

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

Что ж, наверное так устроена ASE и хрен с ним.

Для меня главное - что это не глюк какой-нибудь , уже это отрадно.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33385982
да, еще - запрос всегда делал без where


похоже мне как раз попалось приложение, в котором разработчики понадеялись на сию особенность - дало началось с жалобы юзера что таблица мол "поехала". А на самом деле такая хрень. Что ж они без ORDER BY - то :-(
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33386021
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
трава у дома wrote:

> похоже мне как раз попалось приложение, в котором разработчики
> *понадеялись на сию особенность*

Голосую: убить.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33387920
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трава у домаА кстати следует ли из изложенного то, что порядок при выборке без ORDER BY
может в принципе меняться от случая к случаю?

Да, так и есть.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33387932
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Sania
А в каком случае сервер применит стратегию отличную от table scan?
Может когда есть индекс покрывающий все поля таблицы?

Ну например. Еще когда в хинте индекс задан явно (форсирован), то же когда задан абстрактный план. При JOIN-е этой таблицы к другим может быть выбран индекс. При GROUP BY или DISTINCT. Но самое главное, что сам table scan не гарантирует порядка, совпадающего с пор. следования записей в таблице.
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33390257
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to MasterZiv

Так и не понял к чему это, обсуждался запрос вида:
Код: plaintext
select * from таблица
ни хинтов, ни group by, ни distinct, ни объединения таблиц, про абстрактные планы тоже упоминания не было. Конечно пинком можно заставить сервер поменять план, но вы сказали, что он сам может выбрать стратегию отличную от table scan - в каком случае?

Еще раз:

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

В оригинале:
ДокументацияBy following the “next page” pointers on the data pages, Adaptive
Server reads the entire table in index key order.

Похоже просто случай из раздела lost translation (перевод официальный), а в оригинале вроде все вполне определенно.

to "Трава у дома"

Не могли бы вы привести вывод sp_help по таблице - там должны быть строки, например:
Object is not partitioned.
Lock scheme Allpages

или соответственно что-то другое.

У вас используется параллельное исполнение?
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33390288
2 _Sania Так и есть

Object is not partitioned.
Lock scheme Datarows

Параллельное исполнение не используется.

Результаты запроса select * from table
стабильны (от раза к разу порядок один и тот же, насколько я вижу)
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Порядок строк в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]