Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Простейший вопрос - чем определяется порядок строк в таблице? То есть если просто делать select * from table то выйдет упорядоченно как-то (например по кластерному индексу) или как Бог на душу положит? Потому что странно - была таблица, поле когда добавлялись записи, поле ID было с кластерным индексом при выборке без order by сортировалось по нему. А сейчас что-то перестало - новые записи то в середине то в начале вообще. Стоит обращать на это внимание? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 12:20 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Трава у домаЗдравствуйте! Простейший вопрос - чем определяется порядок строк в таблице? То есть если просто делать select * from table то выйдет упорядоченно как-то (например по кластерному индексу) или как Бог на душу положит? Потому что странно - была таблица, поле когда добавлялись записи, поле ID было с кластерным индексом при выборке без order by сортировалось по нему. А сейчас что-то перестало - новые записи то в середине то в начале вообще. Стоит обращать на это внимание? Никакого порядка хранения в таблицы и вывода SELECT-ом записей нет. Как серверу удобно, так он и делает. Получать гарантированно упорядоченные записи можно только одним способом - указанием ORDER BY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 12:23 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Трава у дома пишет: > Простейший вопрос - чем определяется порядок строк в таблице? > То есть если просто делать select * from table > то выйдет упорядоченно как-то (например по кластерному индексу) > или как Бог на душу положит? Как серверу удобнее. Ни в коем случае нельзя закладываться на такой порядок. Хочешь упорядоченно - используй order by. Это оговорено и стандартами и документацией. > Потому что странно - была таблица, поле когда добавлялись > записи, поле ID было с кластерным индексом при выборке без order by > сортировалось по нему. А сейчас что-то перестало - > новые записи то в середине то в начале вообще. Ничего странного. > Стоит обращать на это внимание? Нет. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 12:25 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
нарушил правила :-( ASE 12.5.3 В общем вы меня успокоили. Я на это конечно никогда не полагался, но просто странно как-то стало - раньше отсортированы были, а теперь вразнобой. Я и подумал - не случилось ли чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 12:48 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
а может без orde by оно вытаскивается по страницам, соответственно если страница была освобождена и в нее попали новые данные, вот они и вылезли раньше старых ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 12:51 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
В ASE это зависит от типа таблицы (как она блокируется), если она allpageslock - то все записи должны быть отсортированы по первичному ключу ДокументацияВ кластерных индексах по таблицам с блокировкой всех страниц страни- цы листового уровня также являются страницами данных, и все строки хранятся в физическом порядке согласно значениям ключей. в случае datapageslock или rowlock - таблица не будет обязательно автоматически упорядочиваться по ключу, сервер только попытается это сделать если на страницах будет свободное место ДокументацияВ отличие от кластерных индексов по таблицам с блокировкой всех страниц, строки данных в таблицах с блокировкой только данных не обязательно хранятся строго в порядке значений ключа. В этом случае индекс направляет строки на страницы, содержащие смежные или близ- кие ключи. Добиваться упорядочивания по кластерному ключу для таблиц с типом блокирования отличныи от allpageslock можно с помощью параметров управления пространством (например fillfactor) и выполнением команды reorg rebuild. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 17:21 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
_Sania пишет: > В ASE это зависит от типа таблицы (как она блокируется), если она > allpageslock - то все записи должны быть отсортированы по первичному ключу Что значит должны? В процитированной документации сказано только про то, что строки ХРАНЯТСЯ в физическом порядке согласно значениям ключей. А разве там сказано, что без ORDER BY записи должны выдаваться в том же порядке, в котором хранятся? Даже если в текущей версии это так, то я сомневаюсь, что это а) гарантированно, б) останется в дальнейшем так. Ну нельзя в SQL-серверах закладываться на порядок выдачи без ORDER BY. Независимо от типов таблиц и прочих факторов, в том числе и типа SQL-сервера. Просто нельзя и все. Это надо забить себе в голову и забыть про dbf-прошлое. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 17:47 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун wrote: > Это надо забить себе в голову и забыть про dbf-прошлое. Предлагаю в описании вакансий писать "_без_ опыта работы с файл-серверными БД" . Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 17:55 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
ДокументацияФизическое упорядочение означает следующее: • Все элементы на странице данных расположены в порядке индексного ключа. • Вся таблица может быть прочитана в порядке индексного ключа благодаря тому, что на каждой странице данных есть указатели на следующую страницу. При простом select * from таблица выполняется table scan, при этом данные читаются по страницам, котрые (у таблиц с кластерным ключом и типом блокирования allpages) расположены в порядке кластерного ключа. Описание работы кластерного индекса довольно объемное, полностью приводить его нет смысла >Александр Гoлдун >Даже если в текущей версии это так, то я сомневаюсь, что это а) гарантированно, Гарантированно. >б) останется в дальнейшем так. Это из области домыслов, пока не менялось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 18:16 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
_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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 18:53 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
_SaniaВ ASE это зависит от типа таблицы (как она блокируется), если она allpageslock - то все записи должны быть отсортированы по первичному ключу ... и то только если он кластерный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 23:04 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун Что значит должны? В процитированной документации сказано только про то, что строки ХРАНЯТСЯ в физическом порядке согласно значениям ключей. А разве там сказано, что без ORDER BY записи должны выдаваться в том же порядке, в котором хранятся? Нет, не должны , и это естественно нигде не написано. И порядок хранения и порядок, в котором появляются записи в наборе, выданном SELECT-ом -- совершенно разные вещи. Например, на том же SELECT * from ATABLE_WITH_CLUSTERED_INDEX включаем парралелизм, и тут же набор перестает быть отсортированным вообще хоть как то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 23:07 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
При простом select * from таблица выполняется table scan, Далеко не факт. И в документации нигде такого не сказано. при этом данные читаются по страницам, котрые (у таблиц с кластерным ключом и типом блокирования allpages) расположены в порядке кластерного ключа. Опять-таки , говорю -- включите парралельное выполнение запроса. "Порядок" тут же изчезнет. Гарантированно. Это НЕ ГАРАНТИРОВАНО. Александр абсолютно прав. Гарантирован порядок хранения. А то, что запрос выдаст вам записи в порядке хранения - далеко не факт. И это не гарантированно и нигде не оговаривается в документации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 23:12 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
А кстати следует ли из изложенного то, что порядок при выборке без ORDER BY может в принципе меняться от случая к случаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 23:34 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Трава у домаА кстати следует ли из изложенного то, что порядок при выборке без ORDER BY может в принципе меняться от случая к случаю? Естественно. Кстати, если использовать слова FIRST или TOP X без order by - сервер выдаст предупреждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 23:55 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Трава у дома пишет: > А кстати следует ли из изложенного то, что порядок при выборке без ORDER BY > может в принципе меняться от случая к случаю? Так именно об этом тут и твердим! В ASA так вообще два подряд выполненных SELECT могут выдать разных порядок, даже если данные в таблице не менялись. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 09:02 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
to MasterZiv Понятно, про парралелизм то я и забыл, однако он используется редко, и помнится вы же и рекомендовали использовать его крайне осторожно. Насколько показывает опыт, в обычном режиме происходит выдача данных именно по кластерному ключу и некоторые разработчики под ASE это используют (не я и не в нашей конторе), сомневаюсь, что у "Трава у дома" включен параллелизм, скорее всего, изменили тип блокирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 09:21 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
ДокументацияЕсли это таблица с блокировкой всех страниц, то при сканировании таблицы или сканировании, использующем кластерный индекс для просмотра большого количества страниц, страницы данных просмат- риваются по указателям на следующую страницу, которые есть на каждой странице. Честно говоря я всегда думал, что это и гарантирует упорядоченность вывода, теперь уже сам засомневался. С параллельным сканированием, особенно если таблица секционирована, все ясно - порядок не гарантирован, но без него вроде должно быть по порядку. to MasterZiv >При простом select * from таблица выполняется table scan, >Далеко не факт. И в документации нигде такого не сказано. А в каком случае сервер применит стратегию отличную от table scan? Может когда есть индекс покрывающий все поля таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 10:03 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
опишу еще раз: таблица заполнялась. И при запросе без order by выдавались строки упоредоченно ID-шнику (он кластерный индекс) потом случилось так - старые уже добавленные записи все так же и выдаются, в том же порядке (всегда) а новые - первая попала в середину вторая попала в самое начало (стала первой) а последующие добавляются строго после нее. Исходя из того, что вы все написали наверное похоже на то, что например началась новая страница и записи попадают на нее. Стало интересно - взял резервную копию еще до этого происшествия - добавил записи - добавлялось в конец, две штуки в середину попали, а потом снова - запись добавилась в начало и стали строго после нее добавляться. Что ж, наверное так устроена ASE и хрен с ним. Для меня главное - что это не глюк какой-нибудь , уже это отрадно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 10:09 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
да, еще - запрос всегда делал без where похоже мне как раз попалось приложение, в котором разработчики понадеялись на сию особенность - дало началось с жалобы юзера что таблица мол "поехала". А на самом деле такая хрень. Что ж они без ORDER BY - то :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 10:13 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
трава у дома wrote: > похоже мне как раз попалось приложение, в котором разработчики > *понадеялись на сию особенность* Голосую: убить. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 10:23 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Трава у домаА кстати следует ли из изложенного то, что порядок при выборке без ORDER BY может в принципе меняться от случая к случаю? Да, так и есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 21:31 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
_Sania А в каком случае сервер применит стратегию отличную от table scan? Может когда есть индекс покрывающий все поля таблицы? Ну например. Еще когда в хинте индекс задан явно (форсирован), то же когда задан абстрактный план. При JOIN-е этой таблицы к другим может быть выбран индекс. При GROUP BY или DISTINCT. Но самое главное, что сам table scan не гарантирует порядка, совпадающего с пор. следования записей в таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 21:36 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
to MasterZiv Так и не понял к чему это, обсуждался запрос вида: Код: plaintext Еще раз: Документация• Вся таблица может быть прочитана в порядке индексного ключа благодаря тому, что на каждой странице данных есть указатели на следующую страницу. В оригинале: Документация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 или соответственно что-то другое. У вас используется параллельное исполнение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 14:58 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
2 _Sania Так и есть Object is not partitioned. Lock scheme Datarows Параллельное исполнение не используется. Результаты запроса select * from table стабильны (от раза к разу порядок один и тот же, насколько я вижу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 15:06 |
|
||
|
|

start [/forum/topic.php?fid=55&fpage=93&tid=2013244]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
19ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 288ms |

| 0 / 0 |
