powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Замена DISTINCT
13 сообщений из 38, страница 2 из 2
Замена DISTINCT
    #40099913
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Аудитор пару часов спокойно подождет точных данных, если они ему реально нужны.
Но, полагаю, даже аудитор для оценки положения дел примет цифру с точностью +-1%.
С третьей стороны, если Вы заранее знаете типовые вопросы аудитора, то ничто не мешает считать цифирь по закрытию банковского дня и откладывать в сторону.

+1
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40099929
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256
verter
SQL*Plus,
да, проблема решается только включением параллельности, т.е. вот так:

А ещё проблема может решаться (а может и не решаться) построением дополнительных индексов. Чтобы не гадать на кофейной гуще, лучше сразу бы приложили план с +ALLSTATS или репорт SQL Monitor.

+1
еще distinct может портить план запроса, выключать, например, single partition.
с индексами у Кайта есть красивый иерархический пример построения distinct.
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40099941
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus
Пример не убедительный.

Я не собираюсь кого-либо в чем-то убеждать, как говорится - "по вопросам веры идите в церковь". Реальная жизнь такова что иногда приходится делать то, что должно, а не то, что хочется.
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40099961
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как аудитор узнает, что ему дали данные, на .5% отличающиеся от факта?
Сам он их считать не будет на миллионах транзакций. Какие дадут, на те и обопрётся.
Для него это просто цифры, причем не сильно отличающиеся.
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40100015
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter

к сожалению стало даже дольше.


а так?
select count(count(*)) cc from tbl group by CODE, NAME

ps
+PARALLEL(xx)

.....
stax
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40100084
lav314
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Впервые вижу, что кто-то так активно продвигает функцию приближенного вычисления. Во-первых, в общем случае аналитик, решающий задачу поиска distinct-значения, бесконечно далек от финальной цели поиска ответа и не может оценить требуемую точность. Более того, человек, ставящий ему задачу тоже может не понимать этого, особенно если речь идет о финансовых и бухгалтерских расчетах.

Во-вторых, сама приближенная функция дает не какую-то заранее известную ошибку, она тупо не гарантирует никакой заранее известной точности! Это не научный подход. На такую функцию можно положиться, когда ты для своих целей что-то делаешь и в любой момент можешь переделать решение на 100% точное. А не в случае, когда кто-то зачем-то попросил тебя посчитать число и уже никогда не вернется к тебе, думая, что получил единственно верный, абсолютно точный ответ, а по факту не доплатит налоги в размере 3% от месячной выручки Мегафона или, если перевести в рубли, примерно 3 года тюрьмы.
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40100087
verter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, заметил такую вещь.

Если делать выборку с параллелизмом, т.е.

Код: plsql
1.
2.
SELECT /*+ PARALLEL(16) */
FROM TBL ...


то ничего кроме хинта PARALLEL оптимизатору не нужно, параллельность включается.

А вот если хочется включить параллельность на вставку в таблицу, т.е.

Код: plsql
1.
2.
3.
INSERT /*+ PARALLEL(16) */
INTO TBL(...)
SELECT ...


то одного хинта не достаточно, нужно сначала перед вставкой выполнить:

Код: plsql
1.
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';


а потом после вставки выполнить соответственно:

Код: plsql
1.
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML';


Это почему так?
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40100092
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter

Это почему так?


Потому что SELECT не есть DML и ему не надо заморачиваться с трансакционностью, "stable set of rows", и.т.д.

SY.
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40100093
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lav314
приближенная функция дает не какую-то заранее известную ошибку, она тупо не гарантирует никакой заранее известной точности ! Это не научный подход.

Не научный подход - это ляпнуть на весь лес авторитетное мнение, не изучив матчасть.
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40100156
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY
verter

Это почему так?


Потому что SELECT не есть DML и ему не надо заморачиваться с трансакционностью, "stable set of rows", и.т.д.

SY.

А более конкретно, от старта parallel DML и до commit/rollback не будут работать ни другие DML, ни даже простые селекты. Так что с ними надо быть очень осторожным.
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40100327
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
verter
Кстати, заметил такую вещь.

Если делать выборку с параллелизмом, т.е.

Код: plsql
1.
2.
SELECT /*+ PARALLEL(16) */
FROM TBL ...


то ничего кроме хинта PARALLEL оптимизатору не нужно, параллельность включается.

А вот если хочется включить параллельность на вставку в таблицу, т.е.

Код: plsql
1.
2.
3.
INSERT /*+ PARALLEL(16) */
INTO TBL(...)
SELECT ...


то одного хинта не достаточно, нужно сначала перед вставкой выполнить:

Код: plsql
1.
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';


а потом после вставки выполнить соответственно:

Код: plsql
1.
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML';


Это почему так?
Потому что обычно в базах данных по умолчанию отключено параллельное выполнение операций DML.

Но, например, автономной базе данных конфигурации Data Warehouse параллельное выполнение DML включено по умолчанию.
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40102519
igaraev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
verter,

А вы пробовали DISTINCT заменить на group by ?
Я не знаю почему, но иногда это работает намного быстрее.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT COUNT(*)
FROM (
SELECT CODE, NAME
FROM TBL
WHERE CREATE_DATE = to_date('2021.09.24','YYYY.MM.DD')
GROUP BY CODE, NAME
)
...
Рейтинг: 0 / 0
Замена DISTINCT
    #40102536
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igaraev,

22375764

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


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