[PL/SQl]помогите с запросом[помогли!]
Т.е. для приведенной таблицы ответ 2?
01.01.01 12:00:00 | 2 | 2 |
т.е. для начала можно на каждое одинаковое время количество измененных параметров/фичеров.
пока накатал свои мысли по получению такой статистики, но на таблице такого объема они права на жизнь, похоже, не имеют =/
ответ где?
SELECT NVL(SUM(uniq_param0 NVL(SUM(uniq_feature0) INTO par_ch_num, fch_ch_num
FROM
(
SELECT COUNT(*) AS uniq_param, COUNT(DISTINCT ftrcdgrp) AS uniq_feature
FROM
(
SELECT
srv_trx_s_no, ftrcdgrp,
COUNT(*) over (PARTITION BY srv_trx_s_no, ftrcdgrp, ftrprm, features) AS cnt
FROM srvtrx_ftr
WHERE
(sys_creation_date BETWEEN loop_date AND (loop_date+3599/86400
AND
partition_id = start_partition_id <- предварительно считается по формуле.
AND
srv_trx_s_mod in (1,2,3,4,5)
)
WHERE CNT < 2
GROUP BY srv_trx_s_no
);
но по идее ещё будет слегка переделан. на тестовых базах обнаружилось отсутствие индексов
но по идее ещё будет слегка переделан. на тестовых базах обнаружилось отсутствие индексова как вообще там что-то работает без индексов на таких объемах данных? фуллсканит?
фуллсканит?он всегда фулсканит. и это всегда индекс, покуда есть таковой (а обычно хотя бы по primary key он есть иногда это - тупо-таблица (вырожденный случай индекса - по id строчки)
и окгда он сканит по индексу, который выбирает только те значения, которые нам нужны (или почти только их наступает вселенское счастье
собери статистику
ну и индексы тоже надо правильно создавать
собери статистикупо чему?
ну и индексы тоже надо правильно создаватьдык и я о том же
запрос еще считает вовсе не то, что в первом посте...
Для меня в текущей постановки задача требует напрячь моск.
Автор, если хочешь получить больше ответов ПРОЩЕ сформулируй задачу, в частности хоть столбцы и значения переименуй в человечьи, не привязанные к твоему бизнесу.
да я говорю - до необходимого я уже разобрался. текущий запрос выдает статистику за час, далее просто сделать цикл. тема закрыта.
а как вообще там что-то работает без индексов на таких объемах данных? фуллсканит?вот афтор пишет про данные за час, и еще вроде как цикл собирается по этому делать
если в итоге нужны результаты скажем за день, вполне возможно, что партициирование по дням + фуллскан будет выгоднее индексов
ну так, к слову, у нас на партиции лежат данные за 4 дня, но статистика нужна почасовая.
вполне возможнонет, невозможно.
будет не медленней, но и быстрее не будет.
партиционирование помогает разве что с блокировками
когда выбирается процент данных близкий к 100, фулл скан по таблице практически всегда выгоднее full/range/skip сканов по индексу
ибо db file scattered read
кроме того, доступ по индексу всегда жрет буферный кэш, что в случаях с большим кол-вом данных отрицательно влияет не только на текущую, но и на другие сессии
а вот кластеризованный индекс, имо, должен быть почти всегда
хотя если собирается статистика по каким-то данным, и при этом невыгодно строить по параметру кластеризованный индекс, вполне спасёт индекс с включёнными столбцами.
не проще ли какие-нить оконные функции юзать?
это я к тому, что каждый час (loop это фактически фулскан целой партиции, а мне кажется, что партиция у тебя не хилая.
Оставить комментарий
fufa58
собственно в силу слабого пока знания вопроса неожиданно возникла проблемная задача.в общем, есть таблица(большая, 4 миллиарда записей). Из интересных полей есть дата SYS_CREATION_DATE, номер транзакции SRV_TRX_S_NO, название фичера FTRCDGRP, тип фичера NEW_OR_PREV, название параметра FTRPRM, значение параметра FEATURES.
как все это работает: каждый фичер есть набор параметров. кроме того, известно прошлое значение параметров для этого фичера, текущие параметры от предыдущих отличаются полем NEW_OR_PREV (там N или P). могут существовать фичеры с одинаковыми именами в разных транзакциях, в одном фичере в пределах одинакового NEW_OR_PREV не может быть одноименных параметров. т.е. получается примерно такая табличка:
01.01.01 12:00:00
01.01.01 12:00:00
01.01.01 12:00:00
01.01.01 12:00:00
01.01.01 12:00:00
01.01.01 12:00:00
01.01.01 12:00:00
так вот. Параметр считается изменившимся (розовые элементы в таблице сверху если его значения в пределах данного фичера в пределах данной транзакции для new и previous либо различаются, либо если он существовал только в одном из этих состояний.
фичер соответственно считается изменившимся, если в нем есть изменившиеся параметры.
И зная все это надо построить статистику по промежуткам времени, сколько параметров/фичеров за данный промежуток было изменено. помогите плз