Thirteen
|
ጷ
|
|
|
|
Рег.: 28.02.2005
|
Сообщений: 10082
|
|
Рейтинг: 6752
|
|
[PL/SQl]помогите с запросом[помогли!]
11.08.2008 10:29
|
|
|
собственно в силу слабого пока знания вопроса неожиданно возникла проблемная задача. в общем, есть таблица(большая, 4 миллиарда записей). Из интересных полей есть дата SYS_CREATION_DATE, номер транзакции SRV_TRX_S_NO, название фичера FTRCDGRP, тип фичера NEW_OR_PREV, название параметра FTRPRM, значение параметра FEATURES. как все это работает: каждый фичер есть набор параметров. кроме того, известно прошлое значение параметров для этого фичера, текущие параметры от предыдущих отличаются полем NEW_OR_PREV (там N или P). могут существовать фичеры с одинаковыми именами в разных транзакциях, в одном фичере в пределах одинакового NEW_OR_PREV не может быть одноименных параметров. т.е. получается примерно такая табличка:
SYS_CREATION_DATE | SRV_TRX_S_NO | FTRCDGRP | NEW_OR_PREV | FTRPRM | FEATURES |
01.01.01 12:00:00 | 1 | CHPPAY | N | PARAM1 | 1 |
01.01.01 12:00:00 | 1 | CHPPAY | N | PARAM2 | 2 |
01.01.01 12:00:00 | 1 | CHPPAY | P | PARAM1 | 1 |
01.01.01 12:00:00 | 1 | CHPPAY | P | PARAM2 | 3 |
01.01.01 12:00:00 | 1 | CHCLIP | N | PARAM1 | 1 |
01.01.01 12:00:00 | 1 | CHCLIP | N | PARAM2 | 2 |
01.01.01 12:00:00 | 1 | CHCLIP | P | PARAM1 | 1 |
так вот. Параметр считается изменившимся (розовые элементы в таблице сверху), если его значения в пределах данного фичера в пределах данной транзакции для new и previous либо различаются, либо если он существовал только в одном из этих состояний. фичер соответственно считается изменившимся, если в нем есть изменившиеся параметры.
И зная все это надо построить статистику по промежуткам времени, сколько параметров/фичеров за данный промежуток было изменено. помогите плз
Редактировал Thirteen (11.08.2008 15:02)
|
улыбаемся и машем |
|
Zoobastik
|
Комок меха
|
|
|
|
Рег.: 18.10.2003
|
Сообщений: 7462
|
Из: За спиной
|
Рейтинг: 4347
|
|
Re: [PL/SQl]помогите с запросом
[re: Thirteen]
11.08.2008 13:39
|
|
|
Т.е. для приведенной таблицы ответ 2?
|
|
Thirteen
|
ጷ
|
|
|
|
Рег.: 28.02.2005
|
Сообщений: 10082
|
|
Рейтинг: 6752
|
|
|
ну точнее ответ типа
т.е. для начала можно на каждое одинаковое время количество измененных параметров/фичеров.
пока накатал свои мысли по получению такой статистики, но на таблице такого объема они права на жизнь, похоже, не имеют =/
|
улыбаемся и машем |
|
vdv_
|
steel
|
|
|
|
Рег.: 01.01.2004
|
Сообщений: 10795
|
Из: под машины
|
Рейтинг: 2411
|
|
Re: [PL/SQl]помогите с запросом
[re: Thirteen]
14.08.2008 15:39
|
|
|
ответ где?
|
Мы также гордимся тем, чего не делаем, как и тем, что делаем //Стив Джобс |
|
Thirteen
|
ጷ
|
|
|
|
Рег.: 28.02.2005
|
Сообщений: 10082
|
|
Рейтинг: 6752
|
|
Re: [PL/SQl]помогите с запросом
[re: vdv_]
14.08.2008 15:56
|
|
|
мне тут рассказали много чего интересного, так что ответ пока в виде цикла по часам с
code: SELECT NVL(SUM(uniq_param),0), NVL(SUM(uniq_feature),0) 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
);
но по идее еще будет слегка переделан. на тестовых базах обнаружилось отсутствие индексов
|
улыбаемся и машем |
|
vdv_
|
steel
|
|
|
|
Рег.: 01.01.2004
|
Сообщений: 10795
|
Из: под машины
|
Рейтинг: 2411
|
|
Re: [PL/SQl]помогите с запросом
[re: Thirteen]
14.08.2008 17:46
|
|
|
В ответ на:
но по идее еще будет слегка переделан. на тестовых базах обнаружилось отсутствие индексов
а как вообще там что-то работает без индексов на таких объемах данных? фуллсканит?
|
Мы также гордимся тем, чего не делаем, как и тем, что делаем //Стив Джобс |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [PL/SQl]помогите с запросом
[re: vdv_]
14.08.2008 18:09
|
|
|
В ответ на:
фуллсканит?
он всегда фулсканит. и это всегда индекс, покуда есть таковой (а обычно хотя бы по primary key он есть), иногда это - тупо-таблица (вырожденный случай индекса - по id строчки) и окгда он сканит по индексу, который выбирает только те значения, которые нам нужны (или почти только их), наступает вселенское счастье
|
|
vdv_
|
steel
|
|
|
|
Рег.: 01.01.2004
|
Сообщений: 10795
|
Из: под машины
|
Рейтинг: 2411
|
|
Re: [PL/SQl]помогите с запросом
[re: Yorik]
14.08.2008 18:20
|
|
|
собери статистику
|
Мы также гордимся тем, чего не делаем, как и тем, что делаем //Стив Джобс |
|
vdv_
|
steel
|
|
|
|
Рег.: 01.01.2004
|
Сообщений: 10795
|
Из: под машины
|
Рейтинг: 2411
|
|
Re: [PL/SQl]помогите с запросом
[re: Yorik]
14.08.2008 18:21
|
|
|
ну и индексы тоже надо правильно создавать
|
Мы также гордимся тем, чего не делаем, как и тем, что делаем //Стив Джобс |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [PL/SQl]помогите с запросом
[re: vdv_]
14.08.2008 18:21
|
|
|
В ответ на:
собери статистику
по чему?
|
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [PL/SQl]помогите с запросом
[re: vdv_]
14.08.2008 18:21
|
|
|
В ответ на:
ну и индексы тоже надо правильно создавать
дык и я о том же
|
|
vdv_
|
steel
|
|
|
|
Рег.: 01.01.2004
|
Сообщений: 10795
|
Из: под машины
|
Рейтинг: 2411
|
|
Re: [PL/SQl]помогите с запросом
[re: Thirteen]
14.08.2008 18:51
|
|
|
запрос еще считает вовсе не то, что в первом посте...
|
Мы также гордимся тем, чего не делаем, как и тем, что делаем //Стив Джобс |
|
Zoobastik
|
Комок меха
|
|
|
|
Рег.: 18.10.2003
|
Сообщений: 7462
|
Из: За спиной
|
Рейтинг: 4347
|
|
Re: [PL/SQl]помогите с запросом
[re: vdv_]
14.08.2008 19:08
|
|
|
Ну ты молодец, что не поленился разобраться
Для меня в текущей постановки задача требует напрячь моск.
Автор, если хочешь получить больше ответов ПРОЩЕ сформулируй задачу, в частности хоть столбцы и значения переименуй в человечьи, не привязанные к твоему бизнесу.
|
|
Thirteen
|
ጷ
|
|
|
|
Рег.: 28.02.2005
|
Сообщений: 10082
|
|
Рейтинг: 6752
|
|
|
да я говорю - до необходимого я уже разобрался. текущий запрос выдает статистику за час, далее просто сделать цикл. тема закрыта.
|
улыбаемся и машем |
|
Fedos
|
|
|
|
|
Рег.: 19.11.2003
|
Сообщений: 5694
|
Из: помойки
|
Рейтинг: 1816
|
|
Re: [PL/SQl]помогите с запросом
[re: vdv_]
15.08.2008 00:21
|
|
|
В ответ на:
а как вообще там что-то работает без индексов на таких объемах данных? фуллсканит?
вот афтор пишет про данные за час, и еще вроде как цикл собирается по этому делать если в итоге нужны результаты скажем за день, вполне возможно, что партициирование по дням + фуллскан будет выгоднее индексов
|
why so serious блядь? |
|
Thirteen
|
ጷ
|
|
|
|
Рег.: 28.02.2005
|
Сообщений: 10082
|
|
Рейтинг: 6752
|
|
Re: [PL/SQl]помогите с запросом
[re: Fedos]
15.08.2008 09:59
|
|
|
ну так, к слову, у нас на партиции лежат данные за 4 дня, но статистика нужна почасовая.
|
улыбаемся и машем |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [PL/SQl]помогите с запросом
[re: Fedos]
15.08.2008 10:06
|
|
|
В ответ на:
вполне возможно
нет, невозможно. будет не медленней, но и быстрее не будет. партиционирование помогает разве что с блокировками
|
|
Fedos
|
|
|
|
|
Рег.: 19.11.2003
|
Сообщений: 5694
|
Из: помойки
|
Рейтинг: 1816
|
|
Re: [PL/SQl]помогите с запросом
[re: Yorik]
15.08.2008 10:33
|
|
|
спорное утверждение когда выбирается процент данных близкий к 100, фулл скан по таблице практически всегда выгоднее full/range/skip сканов по индексу ибо db file scattered read кроме того, доступ по индексу всегда жрет буферный кэш, что в случаях с большим кол-вом данных отрицательно влияет не только на текущую, но и на другие сессии
|
why so serious блядь? |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [PL/SQl]помогите с запросом
[re: Fedos]
15.08.2008 10:44
|
|
|
ну при выборе (почти) всех элементов отношения, лезть искать в некластеризованный индекс неразумно. а вот кластеризованный индекс, имо, должен быть почти всегда хотя если собирается статистика по каким-то данным, и при этом невыгодно строить по параметру кластеризованный индекс, вполне спасет индекс с включенными столбцами.
|
|
kenguru
|
kenguru
|
|
|
|
Рег.: 03.11.2005
|
Сообщений: 207
|
|
Рейтинг: 57
|
|
Re: [PL/SQl]помогите с запросом
[re: Thirteen]
19.08.2008 12:29
|
|
|
и сколько твоя процедурка работает, чтобы выдать данные, скажем, за одни сутки? не проще ли какие-нить оконные функции юзать? это я к тому, что каждый час (loop), это фактически фулскан целой партиции, а мне кажется, что партиция у тебя не хилая.
|
|