Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Кладовые данных. Rollup  [new]
Flukky
Member

Откуда: Рига
Сообщений: 488
Ознакамливаюсь с написанием запросов для кладовых данных.
С CUBE разобрался, а вот с Grouping и Rollup не могу понять.

Что делает сочитание функций grouping и rollup?

SELECT Time, Region, Department, SUM(Profit) AS Profit, 
  GROUPING (Time) as T, 
  GROUPING (Region) as R, 
  GROUPING (Department) as D
  FROM Sales
GROUP BY ROLLUP (Time, Region, Department)
6 июн 06, 23:11    [2747430]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
GROUPING и прочие GROUPING_ID позволяют Вам понять, к какой части свертки относится конкретная строка, т.е. понять, какие именно группировки дали текущий результат.
Сам результат образуется классически - посредством групповых функций.
Что-то путанно объясняю...
Что такое rollup?

пусть есть некая выборка R: (select rownum r1, -rownum r2 from dual connect by level < 5);

Тогда

-- запрос
SQL> with R as (select rownum r1, -rownum r2 from dual connect by level < 5)
select grouping(r1) gr1, grouping(r2) gr2, grouping_id(r1,r2) g_id
,r1,r2,sum(r1) sum_r1, sum(r2) sum_r2 from R
group by rollup(r1,r2)
order by 1,2,3
;

  GR1   GR2  G_ID    R1    R2 SUM_R SUM_R
----- ----- ----- ----- ----- ----- -----
    0     0     0     1    -1     1    -1
    0     0     0     2    -2     2    -2
    0     0     0     4    -4     4    -4
    0     0     0     3    -3     3    -3
    0     1     1     1           1    -1
    0     1     1     2           2    -2
    0     1     1     4           4    -4
    0     1     1     3           3    -3
    1     1     3                10   -10

9 rows selected

-- эквивалентен запросу
SQL> with R as (select rownum r1, -rownum r2 from dual connect by level < 5)
select 0 gr1, 0 gr2, 0 g_id, r1, r2, r1 sum_r1, r2 sum_r2 from R
union all
select 0 gr1, 1 gr2, 1 g_id, r1, NULL as r2, r1 sum_r1, sum(r2) sum_r2 from R group by r1
union all
select 1 gr1, 1 gr2, 3 g_id, NULL as r1, NULL as r2, sum(r1) sum_r1, sum(r2) sum_r2 from R;

  GR1   GR2  G_ID    R1    R2 SUM_R SUM_R
----- ----- ----- ----- ----- ----- -----
    0     0     0     1    -1     1    -1
    0     0     0     2    -2     2    -2
    0     0     0     3    -3     3    -3
    0     0     0     4    -4     4    -4
    0     1     1     1           1    -1
    0     1     1     2           2    -2
    0     1     1     3           3    -3
    0     1     1     4           4    -4
    1     1     3                10   -10

9 rows selected

SQL> 
6 июн 06, 23:58    [2747503]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
Тьфу, блин.
Эквивалентом rollup будет такой запрос:
with R as (select rownum r1, -rownum r2 from dual connect by level < 5)
select 0 gr1, 0 gr2, 0 g_id, r1, r2, r1 sum_r1, r2 sum_r2 from R group by r1,r2
union all
select 0 gr1, 1 gr2, 1 g_id, r1, NULL as r2, r1 sum_r1, sum(r2) sum_r2 from R group by r1
union all
select 1 gr1, 1 gr2, 3 g_id, NULL as r1, NULL as r2, sum(r1) sum_r1, sum(r2) sum_r2 from R;
7 июн 06, 00:01    [2747507]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116156
Мне очень понравилась эта статья.
ИМХО очень просто и наглядно

Introduction ROLLUP, CUBE and GROUPING
7 июн 06, 00:28    [2747525]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
Flukky
Member

Откуда: Рига
Сообщений: 488
Больше спасибо!
Разобрался
7 июн 06, 12:30    [2748915]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
Flukky
Member

Откуда: Рига
Сообщений: 488
Хотел спросить про Bitmap инднексы для кладовых. В таблице фактов у меня 180 тыс. записей. В дименсионных таблицах есть primary key, в таблице фактов - foreign key.
После создания bitmap индекса время выполнения запроса не изменилось (от 1 до 3 сек., взависимости от сложности запроса). Но ведь теортерически после добавления bitmap индекса время должно было уменьшиться? Из этого следует, что при таком маленьком объёме данных bitmap индексы бесполезны?
7 июн 06, 12:36    [2748947]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
Flukky
Хотел спросить про Bitmap инднексы для кладовых. В таблице фактов у меня 180 тыс. записей. В дименсионных таблицах есть primary key, в таблице фактов - foreign key.
После создания bitmap индекса время выполнения запроса не изменилось (от 1 до 3 сек., взависимости от сложности запроса). Но ведь теортерически после добавления bitmap индекса время должно было уменьшиться? Из этого следует, что при таком маленьком объёме данных bitmap индексы бесполезны?
А ты уверен, что Оракл использует твои индексы?
Кроме того, индексы и самый эффективный способ получения результата - вещи разные и в общем случае взаимонезависимые.
7 июн 06, 12:42    [2748984]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
Sergey M
Member

Откуда: г. Барнаул
Сообщений: 5462
Bitmap индексы полезны в случае когда в индексированном поле очень мало различных значений. Во всех остальных случаях, они скорее вредны, так например при изменении одной строки с некоторым значением, блокируются все остальные строки, содержащие это же значение в этом поле.
В общем, RTFM Using Bitmap Indexes
7 июн 06, 12:44    [2749001]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
Flukky
Member

Откуда: Рига
Сообщений: 488
Sergey M, это мы знаем. Тут именно такая ситуация, когда они полезны.

Владимор Конев
А ты уверен, что Оракл использует твои индексы?

Теперь уверен, что НЕ ИСПОЛЬЗУЕТ. Если в запросе явно указать использовать bitmap индекс, то запрос становиться намного быстрее (доли секунды). Но сам оптимизатор его не берёт, без подсказки.
7 июн 06, 12:48    [2749026]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
Sergey M
Bitmap индексы полезны в случае когда в индексированном поле очень мало различных значений. Во всех остальных случаях, они скорее вредны, так например при изменении одной строки с некоторым значением, блокируются все остальные строки, содержащие это же значение в этом поле.
В общем, RTFM Using Bitmap Indexes
У человека хранилище данных. Думаю ему изменения информации - вещь не актуальная.
А вообще, вот статья на русском про битмап-индексы:
Тынц
7 июн 06, 12:50    [2749041]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
Flukky
Теперь уверен, что НЕ ИСПОЛЬЗУЕТ. Если в запросе явно указать использовать bitmap индекс, то запрос становиться намного быстрее (доли секунды). Но сам оптимизатор его не берёт, без подсказки.
Статистику собрать???
7 июн 06, 12:51    [2749045]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116156
Flukky
Sergey M, это мы знаем. Тут именно такая ситуация, когда они полезны.

Владимор Конев
А ты уверен, что Оракл использует твои индексы?

Теперь уверен, что НЕ ИСПОЛЬЗУЕТ. Если в запросе явно указать использовать bitmap индекс, то запрос становиться намного быстрее (доли секунды). Но сам оптимизатор его не берёт, без подсказки.

Проанализировали индексы ?
7 июн 06, 12:51    [2749050]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
Flukky
Member

Откуда: Рига
Сообщений: 488
Проанализированы. Может режим оптимизатора другой выбрать?
7 июн 06, 19:51    [2751402]     Ответить | Цитировать Сообщить модератору
 Re: Кладовые данных. Rollup  [new]
Владимор Конев
Member

Откуда:
Сообщений: 3451
Flukky
Проанализированы. Может режим оптимизатора другой выбрать?
А какой режим сейчас?
8 июн 06, 05:27    [2752090]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить