|
|
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
Всем день добрый! Объясните, пожалуйста, почему два одинаковых по смыслу запроса выдают различную сортировку. Данные в табличке подобраны так, что при одинаковых значениях c2 имеются одинаковые значения dt. А если убрать предикат, то будет вообще другая сортировка, хотя данные в подзапросе не меняются. По какому принципу оракл сортирует такие данные? Первый запрос: select * from ( select c1,c2,dt, row_number() over (partition by c2 order by dt desc) rrn from t16012018) t where t.rrn in (1,2,3,4,5,6,7,8,9,10,11,12) Второй запрос: select * from ( select c1,c2,dt, row_number() over (partition by c2 order by dt desc) rrn from t16012018) t where t.rrn between 1 and 12 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 15:59 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
Наполнение таблички: SET DEFINE OFF; Insert into T16012018 (C1, C2, DT) Values (1, 2457171, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457169, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457171, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457171, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457169, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457169, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (0, 2457171, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (0, 2457169, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (0, 2457171, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (0, 2457171, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (0, 2457169, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (0, 2457169, TO_DATE('03/01/2017 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457171, TO_DATE('08/05/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457169, TO_DATE('08/05/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457171, TO_DATE('08/05/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457171, TO_DATE('08/05/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457169, TO_DATE('08/05/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457169, TO_DATE('08/05/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457171, TO_DATE('07/01/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457169, TO_DATE('07/01/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457171, TO_DATE('07/01/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457171, TO_DATE('07/01/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457169, TO_DATE('07/01/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); Insert into T16012018 (C1, C2, DT) Values (1, 2457169, TO_DATE('07/01/2010 00:00:00', 'MM/DD/YYYY HH24:MI:SS')); COMMIT; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:02 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQL, У тебя отсутствует сортировка, поэтому ты получаешь данные в том порядке, в котором они обработались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:04 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQLПо какому принципу оракл сортирует такие данные? Так как не указано order by ... для вывода результата, то ни по какому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:06 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
Не понятно, почему одни и те же данные, сформированные подзапросом select c1,c2,dt, row_number() over (partition by c2 order by dt desc) rrn from t16012018 имеют разную последовательность на выходе после двух предикатов, которые не осекают вообще никаких данных. На рандомный вывод не похоже, хочется понять алгоритм, по которому строится выходной набор данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:15 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQL, вывод данных не рандомный. Он происходит с учетом обработки большого кол-ва разных параметров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:17 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQLНа рандомный вывод не похоже, хочется понять алгоритм, по которому строится выходной набор данных. Это внутренняя кухня Oracle, которую тебе никто не расскажет. Например (гадая на кофейной гуще), может зависеть от того, какие данные есть в кэше, а каких нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:18 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
Может неправильно объяснил. Запрос select c1,c2,dt, row_number() over (partition by c2 order by dt desc) rrn from t16012018 выводит с1 = 0 для rrn = 1 и c2 = 2457171. Если я напишу select * from ( select c1,c2,dt, row_number() over (partition by c2 order by dt desc) rrn from t16012018) t where t.rrn = 1 то для c2 = 2457171, с1 = 1, то есть другое значение c1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:18 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
tru55ArchiSQLНа рандомный вывод не похоже, хочется понять алгоритм, по которому строится выходной набор данных. Это внутренняя кухня Oracle, которую тебе никто не расскажет. Например (гадая на кофейной гуще), может зависеть от того, какие данные есть в кэше, а каких нет. Это я понимаю, что внутренняя, вот ее и хочется понять :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:20 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
Тебе же уже сказали. Если в запросе отсутствует ORDER BY, то порядок строк предсказать невозможно (не гарантирован). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:21 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQLtru55пропущено... Это внутренняя кухня Oracle, которую тебе никто не расскажет. Например (гадая на кофейной гуще), может зависеть от того, какие данные есть в кэше, а каких нет. Это я понимаю, что внутренняя, вот ее и хочется понять :) Зачем? Обуздать все равно не получится. Пропиши явную сортировку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:21 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQLЭто я понимаю, что внутренняя, вот ее и хочется понять :) Зачем, если ты этим не можешь ни управлять, ни использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:22 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
шК0ДЕРArchiSQLпропущено... Это я понимаю, что внутренняя, вот ее и хочется понять :) Зачем? Обуздать все равно не получится. Пропиши явную сортировку Конечно же так и сделаю, просто стало интересно, почему так, гугл ничего не дал, пришел сюда, я ж не знаю, может там есть какой четкий алгоритм (по дате заполнения, или по rowid или еще по чему-то). После ответов понял, что скорее всего четкого алгоритма нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:24 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQLшК0ДЕРпропущено... Зачем? Обуздать все равно не получится. Пропиши явную сортировку Конечно же так и сделаю, просто стало интересно, почему так, гугл ничего не дал, пришел сюда, я ж не знаю, может там есть какой четкий алгоритм (по дате заполнения, или по rowid или еще по чему-то). После ответов понял, что скорее всего четкого алгоритма нет. Попробуйте сравнить планы запросов, может наведет на какие мысли.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:31 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
Скорее всего разные планы запросов получаются. Там где список скорее всего INLIST ITERATOR. А вообще неплохо бы номер версии Oracle сказать и планы привести. Хотя конечно без order by даже один и тот же запрос может выдавать разный порядок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:34 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
Амирбез order by даже один и тот же запрос может выдавать разный порядок.Даже с order by может выдавать разный порядок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:38 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQL, разные планы (сортировки) --> разный результат Код: 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. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:40 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
-2-Амирбез order by даже один и тот же запрос может выдавать разный порядок.Даже с order by может выдавать разный порядок. Не надо усложнять до времени :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:40 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous-2-пропущено... Даже с order by может выдавать разный порядок. Не надо усложнять до времени :) Нет уж ))) Что-то не верится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:50 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
FoxterЧто-то не верится Хинт1: ключ сортировки может не быть уникальным. Хинт2: NLS_SORT может меняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:53 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQLпросто стало интересно, почему так, гугл ничего не дал, пришел сюда, я ж не знаю, может там есть какой четкий алгоритм (по дате заполнения, или по rowid или еще по чему-то). После ответов понял, что скорее всего четкого алгоритма нет. Ищи по форуму, подобная тема не раз уже обсуждалась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 16:57 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
ArchiSQLгугл ничего не дал, пришел сюда Одна из первых ссылок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 17:02 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
шК0ДЕРОдна из первых ссылок Худшая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 17:05 |
|
||
|
Разная сортировка при одинаковом по смыслу запросе.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousFoxterЧто-то не верится Хинт1: ключ сортировки может не быть уникальным. Хинт2: NLS_SORT может меняться. Имелось же ввиду при прочих равных условиях - пример 2 )) И для примера 1 - зачем сортировать по такому полю (с одинаковыми значениями), а если они не одинаковые, а просто с низкой кардинальностью, то сортировка все равно будет одинаковая с применением order by. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2018, 17:06 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39585227&tid=1884583]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 345ms |

| 0 / 0 |
