Базы данных Oracle - статьи

         

Первый запрос вычисляет итоговую сумму


Первый запрос вычисляет итоговую сумму продаж конкретных продуктов за конкретные месяцы 1998 и 1999 годов по конкретным округам. Эти результаты группируются по годам, месяцам, типам округов и продуктам. Полный SQL-оператор можно найти в приложении; на рис. 7 показаны план выполнения оператора и время, затраченное на различных шагах процесса выполнения, как для несжатой таблицы фактов DAILY_SALES, так и для сжатой.



Рис. 7. План выполнения и время, затраченное на различных фазах выполнения запроса типа "звезда" номер 1

Надписи на рисунке:



  • Elapsed Times - интервалы общего затраченного времени;


  • Compressed - сжатая;

    Not Compressed - несжатая;

    NL - nested loop, соединение типа "вложенный цикл";

    HJ - hash join, хеш-соединение;

    Customer - клиент;

    Time - время;

    Item - продукт;

    Local Index Rowid - идентификатор строки из локального индекса;

    Sales Fact Table - таблица фактов по продажам;

    Bitmap AND - битовая операция AND;

    Bitmap merge - слияние битовых векторов;

    Items-Dimension - измерение Items (продукты);

    Time-Dimension - измерение Time (время) .


Оптимизатор СУБД Oracle распознает, что этот запрос - запроса типа "звезда" и преобразует его так, как это было описано выше. Доступ к таблице фактов осуществляется через путь доступа по битовому индексу, базирующемуся на битовой операции AND двух битовых индексов измерений TIME и ITEM. По этим битовым индексам Oracle может эффективно вычислить все квалифицированные идентификаторы строк таблицы DAILY_SALES. Поскольку в таблице фактов содержатся только ссылки на таблицы измерений, а не на их детальные данные, измерения нужно повторно соединять с таблицей фактов. (Прим. ред. Термин повторное соединение ("join back", "join-back", "joinback") определяется в техническом документе [7] следующим образом: "With the transformed SQL, this query is effectively processed in two main phases. In the first phase, all of the necessary rows are retrieved from the fact table using the bitmap indexes… In the second phase of the query (the 'join-back' phase), the dimension tables are joined back to the data set from the first phase." (После преобразования этого SQL-оператора обработка запроса эффективно разбивается на две основные фазы. Во время первой фазы из таблицы фактов с помощью битовых индексов извлекаются все необходимые строки… Во время второй фазы (фазы "повторного соединения") таблицы измерений повторно соединяются с набором данных, полученным в первой фазе.).) Это делается последующими операциями соединения с таблицами ITEM и TIME. В список выборки включены детальные данные из таблицы CUSTOMER, поэтому нам также нужно выполнить соединение с измерением CUSTOMER. Кроме того, в плане выполнения показано время, затраченное на определенных шагах процесса выполнения для сжатой и несжатой таблицы фактов соответственно.



SELECT T.year, T.month, C.district, I.name, SUM(sales) FROM customers C, daily_sales S, items I, time T WHERE S.item_nr=I.item_nr AND S.addr_id=C.addr_id AND S.date=T.date AND T.year in (1998, 1999) AND T.month in (1-05-1998, 1-06-1998, … …, 1-03-1999) AND C.district in ('CO', 'CA') AND I.group = 'classic' AND I.item = 'blue gravave' GROUP BY T.year, T.month, C.district, I.name;


Содержание раздела