powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Порядок строк в таблице
32 сообщений из 32, показаны все 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
Порядок строк в таблице
    #33390396
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже что-то, конечно правильнее и спокойней добавить order by во все запросы, но можно попробовать:

Код: plaintext
alter table таблица lock allpages

Проблемы:

1. Таблица монопольно блокируется на время операции
2. Потребуется много свободного места, зависит от размера таблицы
ДокументацияПри использовании команды alter table...lock для изменения схемы
блокировки таблицы с блокировки всех страниц на блокировку толь-
ко данных и наоборот СУБД Adaptive Server делает копию страниц
данных этой таблицы. В сегменте, где размещается таблица, должно
быть достаточно пространства для полной копии страниц данных.
В сегменте, где размещаются индексы, должно быть место для пере-
строения индексов.
3. Ну и различные мелочи
Документация
• планы запросов в процедурном кэше, которые обращаются к
этой таблице, будут перекомпилированы при их следующем
запуске;
• активные многооператорные процедуры, которые исполь-
зуют эту таблицу, перекомпилируются перед выполнением
следующего шага;
• специальные пакетные транзакции, использующие эту таблицу,
завершаются.
Предупреждение. Изменение схемы блокировки таблицы в ходе
операции массового копирования может привести к поврежде-
нию таблицы. Операция массового копирования сначала полу-
чает сведения о таблице и не удерживает блокировку между мо-
ментом считывания информации о таблице и началом пересылки
строк, оставляя небольшой промежуток времени, когда может
быть запущена команда alter table...lock
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33390515
2 _Sania

Да, четко.
После
alter table tablename lock allpages
стало сортироваться в порядке кластерного индекса.

Таблица небольшая, полторы тыщи записей, так что может даже применим.
Ибо Order By вставить не быстро-приложение не наше и сорцов нету :-(

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

_Sania
> Уже что-то, конечно правильнее и спокойней добавить order by во все
> запросы, но можно попробовать:
>
> alter table таблица lock allpages

Все можно. Можно с 16 этажа пригнуть без парашюта.
- Доктор, когда я делаю вот так - мне больно
- А вы не делайте вот так!

Можно грабли положить в проходном месте. А всем, кто там проходит,
выдавать карту с указанием точного местоположения граблей.
ЗАЧЕМ????

Dim2000
трава у дома wrote:

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

Голосую: убить.

Будет надеяться, что они сами себя поубивают. Не об стенку, а об
грабли, которые сами себе кладут. Главное чтоб посторонние не пострадали.

трава у дома
Таблица небольшая, полторы тыщи записей, так что может даже применим.
Ибо Order By вставить не быстро-приложение не наше и сорцов нету :-(

Выяснить, чье оно, и настучать больно по голове, чтоб быстрее исправляли.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33391183
Александр Гoлдун конечно, order by и только order by.
Я тоже так с самого начала думал.
Хреново с нами поступили наши разработчики
(и это не в первый раз - по секрету вам скажу :-)) Будем кричать-ругаться.
Но все же лично для меня этот топик был полезен в плане образования.


Немного оффтоп, посмеяться или поплакать: вообще дикое приложение - в той части предлагается выбор из таблицы (помним - полторы тыщи записей и растет) выбрать скажем устройство - и вот это устройство юзеру предлагается выбрать из ComboBox,
при чем нет возможности поиска или фильтрации или ручного ввода -только выбор. Шариться в гигантском комбобоксе с прокруткой! И как теперь оказалось - без сортировки, с этим гребаным дефолтом! Юзеры обходились таким образом - новодобавленная (в другом окне) запись попадала всегда в конец - и они просто переходили сразу туда и выбирали. а тут этот порядок нарушился (см. первую мессагу) - и в рядах юзеров наступила легкая паника :-)
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33391194
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трава у дома пишет:

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

Т.е. даже позиционирования по набору первых букв нету? Значит они даже
UI делать не умеют? И где таких находят?
>
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33391418
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТ.е. даже позиционирования по набору первых букв нету? Значит они даже
UI делать не умеют? И где таких находят?
Известно где - в Индии
...
Рейтинг: 0 / 0
Порядок строк в таблице
    #33391424
_Sania
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Александр Гoлдун

В чем я-то виноват?

Везде пишу, что нужен order by - это лучшее решение, но если нужно как-то выкрутиться лучше уж alter table чем слезы, дескать разработчики бяки.

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


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