Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.snto-msu.net/showflat.php?Number=7804943&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 07:42:18 2016
Кодировка: Windows-1251
[PL/SQl]помогите с запросом[помогли!] - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
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_DATESRV_TRX_S_NOFTRCDGRPNEW_OR_PREVFTRPRMFEATURES

01.01.01 12:00:00
1CHPPAYNPARAM11

01.01.01 12:00:00
1CHPPAYNPARAM22

01.01.01 12:00:00
1CHPPAYPPARAM11

01.01.01 12:00:00
1CHPPAYPPARAM23

01.01.01 12:00:00
1CHCLIPNPARAM11

01.01.01 12:00:00
1CHCLIPNPARAM22

01.01.01 12:00:00
1CHCLIPPPARAM11


так вот. Параметр считается изменившимся (розовые элементы в таблице сверху), если его значения в пределах данного фичера в пределах данной транзакции для new и previous либо различаются, либо если он существовал только в одном из этих состояний.
фичер соответственно считается изменившимся, если в нем есть изменившиеся параметры.

И зная все это надо построить статистику по промежуткам времени, сколько параметров/фичеров за данный промежуток было изменено. помогите плз :crazy:





Редактировал 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
  Re: [PL/SQl]помогите с запросом [re: Zoobastik]
      11.08.2008 14:09
 

ну точнее ответ типа
01.01.01 12:00:0022

т.е. для начала можно на каждое одинаковое время количество измененных параметров/фичеров.

пока накатал свои мысли по получению такой статистики, но на таблице такого объема они права на жизнь, похоже, не имеют =/



улыбаемся и машем
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 );


но по идее еще будет слегка переделан. на тестовых базах обнаружилось отсутствие индексов :crazy:



улыбаемся и машем
vdv_
steel

Рег.: 01.01.2004
Сообщений: 10795
Из: под машины
Рейтинг: 2411
  Re: [PL/SQl]помогите с запросом [re: Thirteen]
      14.08.2008 17:46
1

В ответ на:

но по идее еще будет слегка переделан. на тестовых базах обнаружилось отсутствие индексов



а как вообще там что-то работает без индексов на таких объемах данных? фуллсканит? :grin:




Мы также гордимся тем, чего не делаем, как и тем, что делаем //Стив Джобс
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
1

ну и индексы тоже надо правильно создавать



Мы также гордимся тем, чего не делаем, как и тем, что делаем //Стив Джобс
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
1

запрос еще считает вовсе не то, что в первом посте...



Мы также гордимся тем, чего не делаем, как и тем, что делаем //Стив Джобс
Zoobastik
Комок меха

Рег.: 18.10.2003
Сообщений: 7462
Из: За спиной
Рейтинг: 4347
  Re: [PL/SQl]помогите с запросом [re: vdv_]
      14.08.2008 19:08
 

Ну ты молодец, что не поленился разобраться :)

Для меня в текущей постановки задача требует напрячь моск.

Автор, если хочешь получить больше ответов ПРОЩЕ сформулируй задачу, в частности хоть столбцы и значения переименуй в человечьи, не привязанные к твоему бизнесу.

Thirteen

Рег.: 28.02.2005
Сообщений: 10082
Рейтинг: 6752
  Re: [PL/SQl]помогите с запросом [re: Zoobastik]
      14.08.2008 21:46
 

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



улыбаемся и машем
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
2

спорное утверждение
когда выбирается процент данных близкий к 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
1

и сколько твоя процедурка работает, чтобы выдать данные, скажем, за одни сутки?
не проще ли какие-нить оконные функции юзать?
это я к тому, что каждый час (loop), это фактически фулскан целой партиции, а мне кажется, что партиция у тебя не хилая.

Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
1 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в