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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если ты не управляешь системой внятно, она управится сама с тем, что считает своими данными, раз тебе от них ничего не надо.
В системах с декларативных описанием алгоритмов пропуск запятых в "казнить нельзя помиловать" - катастрофическая ошибка, означающая неопределенное поведение.
...
Рейтинг: 0 / 0
16.10.2020, 15:29
    #40009272
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Order by во View
В последних версиях (вроде с 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
16.10.2020, 15:30
    #40009273
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Order by во View
booby,

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

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

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

.....
stax

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

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

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

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


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

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

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

Усе

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

есть существенная разница между "запретить никак" и "гарантии есть".
Из одного не следует другое никак .
...
Рейтинг: 0 / 0
17.10.2020, 20:21
    #40009515
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Order by во View
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
18.10.2020, 05:08
    #40009540
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Order by во View
Stax,

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

дадите ссылку, где в данном случае почитать о записанных выданных гарантиях?
...
Рейтинг: 0 / 0
18.10.2020, 09:08
    #40009550
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Order by во View
Хинты eliminate_oby / no_eliminate_oby
...
Рейтинг: 0 / 0
19.10.2020, 16:08
    #40009901
Гулин Федор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Order by во View
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
19.10.2020, 16:40
    #40009912
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Order by во View
Гулин Федор,

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

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


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