Методы оптимизации выполнения запросов в реляционных СУБД


Некоторые частные алгоритмы - часть 2


SELECT COUNT (*), AVG (SAL + COMM) FROM EMP WHERE DEPT# = 6.

Результатом выполнения такого запроса является кортеж, содержащий число сотрудников шестого отдела и средний размер их заработка. Общим свойством запросов с агрегатными функциями, не содержащих статьи GROUP BY, является то, что результатом любого такого запроса является один кортеж, полученный применением агрегатных функций к группе кортежей, сформированных под управлением логического условия, заданного в разделе WHERE. С использованием статьи GROUP BY можно формулировать более сложные запросы. Например, можно получить информацию о средних доходах сотрудников всех отделов, задав запрос

(Q2) SELECT DEPT#, AVG (SAL + COMM) FROM EMP GROUP BY DEPT#.

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

Как правило, при выполнении запросов с агрегатными функциями требуется сортировка отношений. В приведенных примерах сортировка не нужна только при выполнении запроса Q1: чтобы получить общее число сотрудников, достаточно просканировать отношение EMP любым способом и подсчитать количество кортежей.

Единственным оптимизационным приемом, используемым при выполнении запросов с агрегатными функциями в System R, является применение в случае возможности индексов. Например, для выполнения запроса Q1, если над отношением EMP определен хотя бы один индекс, достаточно просмотреть список записей, хранящихся в листовых блоках этого индекса, вообще не обращаясь к хранимым кортежам. Возможны и более сложные случаи. Если определен индекс на поле SAL и требуется выполнить запрос

SELECT AVG (SAL) FROM EMP, то можно опять обойтись без обращения к кортежам, просматривая только записи индекса.

Естественно, индексы помогают и при выполнении запросов с GROUP BY. Если определен индекс на поле DEPT#, то при выполнении запроса Q2 можно обойтись без сортировки отношения EMP в соответствии со значениями поля DEPT# для построения соответствующих групп: группы естественно образуются записями индекса с равными значениями ключа.


Начало  Назад  Вперед



Книжный магазин