Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции СУБД.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6.32 Mб
Скачать

10.1.Производительность при обработке многотабличных запросов

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

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

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

11.Статистические (агрегатные) функции

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

В SQL имеется пять статистических функций, которые позволяют получать различные виды итоговой информации:

- SUM() – для вычисления суммы всех значений столбца-аргумента

- AVG() – для вычисления среднего значения столбца

- MIN() – определяет минимальное значение столбца

- MAX() – определяет максимальное значение столбца

- COUNT() – подсчитывает число всех определенных значений столбца

- COUNT(*) – подсчитывает число строк таблицы.

Аргументом статистической функции может быть простое имя столбца или выражение. Приведем пример запроса со статистическими функциями:

Определить среднемесячную и среднегодовую зарплату сотрудников предприятия

select avg(salary) as per_month, avg(12*salary) as per_year

from staff;

В предыдущем примере в списке возвращаемых столбцов результирующего множества использовались псевдонимы столбцов, иначе значения в возвращаемой строке будут представлены под именами avg(salary) и avg(12*salary), т.е. псевдонимы здесь введены, можно сказать для “конкретизации” результирующих данных.

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

select count (sno)

from staff

where position = ‘менеджер’;

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

select count (lname)

from staff

where position = ‘менеджер’;

В отличие от функции COUNT() статистическая функция COUNT(*) подсчитывает строки, а не значения в них. Функция COUNT() не учитывает NULL – значений в столбцах – аргументах, также как и любая другая статистическая функция.

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