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


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


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

Насколько нам известно, возможности агерегатных запросов наиболее полно поддерживаются в языке SQL. Напомним, что в списке выборки оператора SELECT этого языка наряду с арифметическими выражениями, построенными из имен полей отношений, указанных в списке FROM, и констант, могут встречаться арифметические выражения, включающие агрегатные функции COUNT, AVG, MIN и MAX, параметрами которых могут быть арифметические выражения первого типа. При этом семантика запроса с агрегатными функциями зависит от наличия или отсутствия в запросе статьи GROUP BY. Поясним это на нескольких примерах.

Вернемся к нашей гипотетической базе данных из Раздела 2. Здесь нас будет интересовать только первое отношение этой базы данных - отношение EMP, в котором регистрируются сотудники организации. Пусть схема этого отношения определена следующим образом: EMP (EMP#, EMPNAME, SAL, COMM, DEPT#). Поля SAL и COMM, соответственно, содержат значения оклада и комиссионных, причитающихся данному служащему. Допустимы следующие запросы:

SELECT COUNT (EMP#) FROM EMP или, эквивалентно, (Q1) SELECT COUNT (*) FROM EMP .

Эти два запроса эквивалентны, поскольку EMP# является первичным ключем отношения. Каждый из них выдает общее количество служащих. Запрос

SELECT COUNT (DEPT#) FROM EMP выдает количество отделов в организации и уже, конечно, не эквивалентен запросу Q1. Может быть задан более сложный запрос, например,




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