powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Строгий порядок строк в чужой таблице
11 сообщений из 61, страница 3 из 3
Строгий порядок строк в чужой таблице
    #40012013
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012016
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL
Кодеры Оракла приняли воинствующую позу по этому вопросу

Воинствующий здесь только ты, нежелание понять хотя бы самые базовые концепции просто потрясающее.
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012017
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Кодеры Оракла приняли воинствующую позу по этому вопросу, чтобы обезопасить новичков от дорогих ошибок, и фраза "если нужен какой-то определенный порядок, только сортировка по уникальному ключу его обеспечит".
Мы знаем из документации что это не совсем так, например

select * from TBL х where x.val between 10 and 20

всегда даст строчки в одном и том же порядке при наличии индекса для val (группа val=10 упорядоченная по rowid, потом группа 11, и т.д.)

Вас же не затруднит привести ссылку на документацию, которая это подтвердит.
По секрету скажу, что это в общем случае тоже неправда, в отсутствие order by наличие индекса порядок не гарантирует.
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012019
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

На игрушечной базе, где всегда одна сессия...
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012022
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
andrey_anonymous,

На игрушечной базе, где всегда одна сессия...




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
SQL> select * from dropme_t where val between 10 and 20;
 
       VAL
----------
        20
        19
        18
        17
        16
        15
        14
        13
        12
        11
 
10 rows selected
 
 
SQL> select * from dropme_t where val between 10 and 20;
 
       VAL
----------
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
 
10 rows selected
 
SQL> select index_name, table_name, column_name, descend from user_ind_columns where table_name like 'DROPME_T';
 
INDEX_NAME   TABLE_NAME COLUMN_NAME  DESCEND
------------ ---------- ------------ -------
DROPME_T$VAL DROPME_T   VAL          ASC
 
SQL> 
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012048
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
НеофитSQL
Кодеры Оракла приняли воинствующую позу по этому вопросу, чтобы обезопасить новичков от дорогих ошибок, и фраза "если нужен какой-то определенный порядок, только сортировка по уникальному ключу его обеспечит".
Мы знаем из документации что это не совсем так, например

select * from TBL х where x.val between 10 and 20

всегда даст строчки в одном и том же порядке при наличии индекса для val (группа val=10 упорядоченная по rowid, потом группа 11, и т.д.)

Вас же не затруднит привести ссылку на документацию, которая это подтвердит.
По секрету скажу, что это в общем случае тоже неправда, в отсутствие order by наличие индекса порядок не гарантирует.



Ссылка есть, правда для 10.х.

https://docs.oracle.com/cd/B13789_01/server.101/b10752/optimops.htm

Index Range Scans
An index range scan is a common operation for accessing selective data. It can be bounded (bounded on both sides) or unbounded (on one or both sides). Data is returned in the ascending order of index columns. Multiple rows with identical values are sorted in ascending order by rowid.

Я это перевел как написал выше. В то же время, анонимный Андрей ибн Москва же опубликовал пример ниже, противоречащий этому утверждению.
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012050
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous
env
andrey_anonymous,

На игрушечной базе, где всегда одна сессия...




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
SQL> select * from dropme_t where val between 10 and 20;
 
       VAL
----------
        20
        19
        18
        17
        16
        15
        14
        13
        12
        11
 
10 rows selected
 
 
SQL> select * from dropme_t where val between 10 and 20;
 
       VAL
----------
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
 
10 rows selected
 
SQL> select index_name, table_name, column_name, descend from user_ind_columns where table_name like 'DROPME_T';
 
INDEX_NAME   TABLE_NAME COLUMN_NAME  DESCEND
------------ ---------- ------------ -------
DROPME_T$VAL DROPME_T   VAL          ASC
 
SQL> 



Эксперимент решает все. Андрей, а что вы сделали, чтобы два одинаковых запроса на таблице с индексом вернули строки в разном порядке? Я так не умею
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012056
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
чтобы два одинаковых запроса на таблице с индексом вернули строки в разном порядке?

Да просто наличие индекса не означает его использование Ораклом. Он может решить, что и без индекса хороший план получился для выполнения запроса.
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012059
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Я так не умею

Полагаю, через время Вы откроете для себя насколько дохрена не знаете/не умеете.
Примите как факт: нельзя строить код на side-эффектах, в частности - нельзя строить код, зависящий от порядка строк, без закрепления посредством order by.
Нель-зя.
Точка.

Применительно к примеру: да, в документации написано правильно.
IRS действительно выдаст binary-ordered.
Не обязательно ascending, но это детали.
Однако приведенная Вами цитата касается IRS ASC и только IRS ASC.
Причем исключительно в NOPARALLEL.
Если оптимизатор примет решение использовать именно его - Вы угадали.
А вот если решит иначе (время от времени это реально происходит) - то будет нежданчик.
Причин, по которым оптимизатор применит иной метод доступа, достаточно много и не все из них самоочевидны. Одна из таких причин была мной спровоцирована в этом демо.
Причем не суть важно какая из - докопаетесь до одной, я спровоцирую другую и все равно покажу Вам, что все несколько сложнее, чем представляется.
Именно поэтому утверждение "порядок гарантирует order by и исключительно order by" верно.
Если и сейчас не сумел донести эту простую мысль - то уже просто не знаю, как быть...
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012061
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
Он может решить, что и без индекса хороший план получился для выполнения запроса.

Верно, но не полно.
Даже с использованием одного и того же индекса можно получить весьма различный порядок строк.
...
Рейтинг: 0 / 0
Строгий порядок строк в чужой таблице
    #40012073
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей-баптист, я принимаю вашу веру. Числа подвохов не перечесть, легче order by PK.
...
Рейтинг: 0 / 0
11 сообщений из 61, страница 3 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Строгий порядок строк в чужой таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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