powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Order by во View
18 сообщений из 18, страница 1 из 1
Order by во View
    #40009157
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем

Oracle 12
Order by во View поддерижвается
попрбовал - запускать вроде одинаковый порядок.

Есть ли гарантия что порядок будет одинаковым , при условии что набор полей в Order by является уникальным ключом ?

В SQL server нельзя было Order by во вью

Я понимаю что лучше задавать Order by во внешнем запросе.
SELECT * FROM View
order by f1 , f2 , ...
;

Но пока было заимплеменечено так на бакенде
и запросы идут пачками по 500 с сдвигом
поэтому важно чтобы порядок записей был одинаков.
...
Рейтинг: 0 / 0
Order by во View
    #40009181
Фотография Изя Кацман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор
Добрый день всем

Oracle 12
Order by во View поддерижвается
попрбовал - запускать вроде одинаковый порядок.

Есть ли гарантия что порядок будет одинаковым , при условии что набор полей в Order by является уникальным ключом ?

В SQL server нельзя было Order by во вью

Я понимаю что лучше задавать Order by во внешнем запросе.
SELECT * FROM View
order by f1 , f2 , ...
;

Но пока было заимплеменечено так на бакенде
и запросы идут пачками по 500 с сдвигом
поэтому важно чтобы порядок записей был одинаков.

Заимплеменчивание ордер баев во вью хайдит мандаторное упорядочение от программёра.

Потом, когда все зафоргетят про этот ордер бай другой девелопер поверх него зааддирует еще один ордер бай.

И Оракл будет мэйкать редудантный сортинг.

Так что, камрад, ты сначала посинкай гуудово и ордер бай поставь в правильный плейс твоей аппликухи.
...
Рейтинг: 0 / 0
Order by во View
    #40009196
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изя Кацман


И Оракл будет мэйкать редудантный сортинг.



уверены? в какой версии будет мэйкать?

.....
stax
...
Рейтинг: 0 / 0
Order by во View
    #40009248
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изя Кацман,

Вопросы перформанса пока не так важны
по тестам вроде все ок
порядок постоянный

понимаю что это возможно не бест практис

ситуация есть 3 вью с разных таблиц
по структуре вью почти одинаковые ( недостающие поля заполнены нулл. и т.д )
вью сделаны потому что на БД проще хитрую логику сделать и главное быстрей менять

и order by в этих вью разный - поэтому не хочется на бакенде это длеать
...
Рейтинг: 0 / 0
Order by во View
    #40009254
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор
Изя Кацман,

Вопросы перформанса пока не так важны

про перформанс Изя немножко приврал (Одессит наверное)

оракля в 99% случаев поймет что два раза сортировать не надо

.....
stax
...
Рейтинг: 0 / 0
Order by во View
    #40009260
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

Когда-то у Oracle , был единственный алгоритм группировки:
- "сначала отсортировать, затем, пробегая по сортированному набору, границы групп определять сравнением текущих полей группировки с ними же в предыдущей записи"

Ясно что такой алгоритм, пока он единственный, всегда, гарантированно и автоматически будет выдавать сортированный по
полям группировки набор данных.
И многие на это сознательно закладывались - зачем дописывать самому Order by, если он автоматически сам окажется такой, какой надо.
Между тем - такое "мнение" - простая логическая ошибка, положившаяся на особенность конкретной реализации алгоритма группировки. Который, в общем случае, не обязан никак быть завязан на предварительную сортировку данных.

На больших наборах данных, этот первоначальный алгоритм работает достаточно плохо, поскольку требует колоссальные объемы работы на предварительную сортировку.

В какой-то момент Oracle реализовал второй алгоритм, существенно (ну, очень-очень существенно) более быстрый на больших наборах -
предварительная сортировка не производится, а по мере пробега по набору строится хеш-таблица, идентифицирующая производимые группы, кодами которой метятся просматриваемые группы.
Такой вариант не только не требует предварительной сортировки, но и замечательно распараллеливается.
В зависимости от размера набора и характеристик группировки, стал применяться тот или иной алгоритм на выбор системы.
Естественно, те, кто поленился дописывать order By стали вопить "как же так! Где же автоматическая сортировка? Это всегда работало!"
Между тем, они были всего лишь жертвами своей собственной логической ошибки и лени рук и мозга.

Если ты не управляешь системой внятно, она управится сама с тем, что считает своими данными, раз тебе от них ничего не надо.
В системах с декларативных описанием алгоритмов пропуск запятых в "казнить нельзя помиловать" - катастрофическая ошибка, означающая неопределенное поведение.
...
Рейтинг: 0 / 0
Order by во View
    #40009272
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последних версиях (вроде с 19й, может с 20й) появились макрофункции, которые можно приспособить для решения
вашей "проблемы".
Во всех предыдущих, один из правильных вариантов решения вашей проблемы может быть таким:
Над тремя своими View образуете четвертую, такого содержания
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Create or Replace View V4 as
Select  v.v_src, v.a , v.b, v.c 
From (
  Select  'V1' as v_src, V1.P1 as a, V1.P2 as b, V1.P3 as c
  From V1
  Union All 
  Select  'V2' as v_src, V2.F1, V1.F2, V1.F3 
  From V2
  Union All 
  Select  'V3' as v_src, V3.M1, V3.M2, V1.M3 
  From V3
) v



И на клиенте всегда обращаетесь только к ней, с запросом такого вида

Код: plsql
1.
2.
3.
4.
5.
Select a,b,c
From V4
Where 
   v4.v_src = 'V2' -- код интересующего вас источника, заменяемое условие фильтра
Order By b Desc, c Asc -- интересующий вас порядок сортировки



Другие варианты, так или иначе, основаны на получение набора данных (курсора) от интерфейсной хранимой процедуры.
...
Рейтинг: 0 / 0
Order by во View
    #40009273
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

Где у Федора о группировке?

.....
stax
...
Рейтинг: 0 / 0
Order by во View
    #40009275
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
booby,

Где у Федора о группировке?

.....
stax

Ровно там, где собрался на клиенте опираться на order by во view.
Впрочем, забудь про группировку...
...
Рейтинг: 0 / 0
Order by во View
    #40009278
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
booby
"сначала отсортировать, затем, пробегая по сортированному набору, границы групп определять сравнением текущих полей группировки с ними же в предыдущей записи" .
это не совсем верное описание. Сортированным был лишь массив агрегатов.
...
Рейтинг: 0 / 0
Order by во View
    #40009286
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender
booby
"сначала отсортировать, затем, пробегая по сортированному набору, границы групп определять сравнением текущих полей группировки с ними же в предыдущей записи" .
это не совсем верное описание. Сортированным был лишь массив агрегатов.

ммм... Ок. Более точное описание будет таким:
Агрегация строилась на очереди агрегатов, реализованной в виде пирамиды, строящейся на поступающем наборе входных данных.
В связи с этим, термин "предварительная сортировка", действительно неверен.
Правильнее сказать так: группировка строилась поверх алгоритма сортировки, расходы на которую были неотделимы от алгоритма группировки,
и цена которой определялась количеством образуемых групп.
Этот вариант и сейчас используется. На малых наборах данных или на наборах с малым числом групп, его производительность близка к идеалу.
В этом смысле, для больших наборов с бедным числом групп, еще надо "посмотреть" - не произошло ли малой деградации с внедрением нового алгоритма.

Точность описания конкретного алгоритма в данную секунду не имеет значения.

Речь, по существу, идет о формировании общей системы ожиданий.
Вот нельзя было в SQL Server - и это очень хорошо .
А Oracle показывает, что работает и ничего не ломает в моих экспериментах.
Ага, давай вот немедленно и воспользуемся наблюдённым...
...
Рейтинг: 0 / 0
Order by во View
    #40009295
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
В последних версиях (вроде с 19й, может с 20й) появились макрофункции
...
Другие варианты,...


Федор спросил

авторЕсть ли гарантия что порядок будет одинаковым?

Гарантия есть, если приложение не определит другой порядок (запретить никак)

Усе

.....
stax
...
Рейтинг: 0 / 0
Order by во View
    #40009391
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

есть существенная разница между "запретить никак" и "гарантии есть".
Из одного не следует другое никак .
...
Рейтинг: 0 / 0
Order by во View
    #40009515
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Stax,

есть существенная разница между "запретить никак" и "гарантии есть".
Из одного не следует другое никак .

если во вью есть order bу ("при условии что набор полей в Order by является уникальным ключом") то порядок гарантируется, при условии что его (порядок) не переопределит приложение, запретить order bу (внешний по отношению к вью) нет возможности

напр вью v_emp select * from emp order by empno

seleсt * from v_emp - порядок гарантирован
seleсt * from v_emp order by job - порядок не гарантирован (job не ключ), запретить order by job нет возможности

.....
stax
...
Рейтинг: 0 / 0
Order by во View
    #40009540
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Когда говорят "порядок гарантируется", подразумевают, что в абстрактных вопросах он гарантируется формальной математикой,
а во всех остальных случаях - юридическим законом или честным словом, записанным на бумаге.

дадите ссылку, где в данном случае почитать о записанных выданных гарантиях?
...
Рейтинг: 0 / 0
Order by во View
    #40009550
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Хинты eliminate_oby / no_eliminate_oby
...
Рейтинг: 0 / 0
Order by во View
    #40009901
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
booby,
Где у Федора о группировке?
.....
stax

Да потверждаю что во View(точнее 3 SQL View) группировки НЕТ

вопрос изменения данных на ходу тоже не рассматривается - обмен данных будет ночью в субботу - вряд ли кто влезет


ворпос возник из за различий в MS-SQL (нельзя делать order by во вью ) и Oracle (можно)

понятно что если есть набор записей с одинаковыми полями {f1,f2}
order by f1 , f2 , .. то порядок НЕ гарантирован
я вроде вытащил набор полей к-й составляет логический UK
и все что меня интересует не будет ли какого-то бага (фичи) в к-м опрядок может измениться
На тестах вроде все ок

Там написан кусок на яве возвращающией по 500 записей с оффсетом (0, 500, 1000,1500 ... ) - поэтому важно чтобы порядок записей был одинаков
когда был ордер Не гарантирующий порядок - был явный баг
интересует возможны ли какие грабли здесь.
...
Рейтинг: 0 / 0
Order by во View
    #40009912
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

Почему б не работать (а бага, она и в вью бага)

имхо
order by должен нормально работать, со времен когда так топ н, искали

из доки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
If you embed the ORDER BY clause in a subquery and place the ROWNUM condition in the top-level query, 
then you can force the ROWNUM condition to be applied after the ordering of the rows. 
For example, the following query returns the employees with the 10 smallest employee numbers. 
This is sometimes referred to as top-N reporting:

SELECT * FROM
   (SELECT * FROM employees ORDER BY employee_id)
   WHERE ROWNUM < 11;



токо у Вас явное вью, не online

ps
кстати для топ 500 в плане будет stopkey

.....
stax
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Order by во View
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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