Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Уже что-то, конечно правильнее и спокойней добавить order by во все запросы, но можно попробовать: Код: plaintext Проблемы: 1. Таблица монопольно блокируется на время операции 2. Потребуется много свободного места, зависит от размера таблицы ДокументацияПри использовании команды alter table...lock для изменения схемы блокировки таблицы с блокировки всех страниц на блокировку толь- ко данных и наоборот СУБД Adaptive Server делает копию страниц данных этой таблицы. В сегменте, где размещается таблица, должно быть достаточно пространства для полной копии страниц данных. В сегменте, где размещаются индексы, должно быть место для пере- строения индексов. 3. Ну и различные мелочи Документация • планы запросов в процедурном кэше, которые обращаются к этой таблице, будут перекомпилированы при их следующем запуске; • активные многооператорные процедуры, которые исполь- зуют эту таблицу, перекомпилируются перед выполнением следующего шага; • специальные пакетные транзакции, использующие эту таблицу, завершаются. Предупреждение. Изменение схемы блокировки таблицы в ходе операции массового копирования может привести к поврежде- нию таблицы. Операция массового копирования сначала полу- чает сведения о таблице и не удерживает блокировку между мо- ментом считывания информации о таблице и началом пересылки строк, оставляя небольшой промежуток времени, когда может быть запущена команда alter table...lock ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 15:39 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
2 _Sania Да, четко. После alter table tablename lock allpages стало сортироваться в порядке кластерного индекса. Таблица небольшая, полторы тыщи записей, так что может даже применим. Ибо Order By вставить не быстро-приложение не наше и сорцов нету :-( Весьма познавательно, спасибо всем отвечавшим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 16:16 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Я фигею с людей. _Sania > Уже что-то, конечно правильнее и спокойней добавить order by во все > запросы, но можно попробовать: > > alter table таблица lock allpages Все можно. Можно с 16 этажа пригнуть без парашюта. - Доктор, когда я делаю вот так - мне больно - А вы не делайте вот так! Можно грабли положить в проходном месте. А всем, кто там проходит, выдавать карту с указанием точного местоположения граблей. ЗАЧЕМ???? Dim2000 трава у дома wrote: > похоже мне как раз попалось приложение, в котором разработчики > *понадеялись на сию особенность* Голосую: убить. Будет надеяться, что они сами себя поубивают. Не об стенку, а об грабли, которые сами себе кладут. Главное чтоб посторонние не пострадали. трава у дома Таблица небольшая, полторы тыщи записей, так что может даже применим. Ибо Order By вставить не быстро-приложение не наше и сорцов нету :-( Выяснить, чье оно, и настучать больно по голове, чтоб быстрее исправляли. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 23:03 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Александр Гoлдун конечно, order by и только order by. Я тоже так с самого начала думал. Хреново с нами поступили наши разработчики (и это не в первый раз - по секрету вам скажу :-)) Будем кричать-ругаться. Но все же лично для меня этот топик был полезен в плане образования. Немного оффтоп, посмеяться или поплакать: вообще дикое приложение - в той части предлагается выбор из таблицы (помним - полторы тыщи записей и растет) выбрать скажем устройство - и вот это устройство юзеру предлагается выбрать из ComboBox, при чем нет возможности поиска или фильтрации или ручного ввода -только выбор. Шариться в гигантском комбобоксе с прокруткой! И как теперь оказалось - без сортировки, с этим гребаным дефолтом! Юзеры обходились таким образом - новодобавленная (в другом окне) запись попадала всегда в конец - и они просто переходили сразу туда и выбирали. а тут этот порядок нарушился (см. первую мессагу) - и в рядах юзеров наступила легкая паника :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 00:48 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
Трава у дома пишет: > Немного оффтоп, посмеяться или поплакать: вообще дикое приложение - в > той части предлагается выбор из таблицы (помним - полторы тыщи записей и > растет) выбрать скажем устройство - и вот это устройство юзеру > предлагается выбрать из ComboBox, > при чем нет возможности поиска или фильтрации или ручного ввода -только > выбор. Т.е. даже позиционирования по набору первых букв нету? Значит они даже UI делать не умеют? И где таких находят? > Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 01:31 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
авторТ.е. даже позиционирования по набору первых букв нету? Значит они даже UI делать не умеют? И где таких находят? Известно где - в Индии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 09:28 |
|
||
|
Порядок строк в таблице
|
|||
|---|---|---|---|
|
#18+
to Александр Гoлдун В чем я-то виноват? Везде пишу, что нужен order by - это лучшее решение, но если нужно как-то выкрутиться лучше уж alter table чем слезы, дескать разработчики бяки. Конечно они сделали криво - никто и не спорил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 09:29 |
|
||
|
|

start [/forum/search_topic.php?author=minimum&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 715ms |
| total: | 919ms |

| 0 / 0 |
