![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Цель настройки приложений – повышение эффективности работы с БД. В настройку приложений входит:
Первый пункт мы уже обсуждали (см. разделы 4.5.2).
Настройка команд SQL, которые используются в приложениях к БД, – это один из основных способов повышения производительности системы. Эта настройка должна производиться каждым разработчиком программного обеспечения.
Для оптимизации приложений необходимо иметь представление о порядке и механизмах реализации запросов в СУБД. Основные информационные потоки между пользователями, оперативной памятью и базой данных приведены на рис. 7.5. В ОП для каждого сеанса связи с БД выделяется специальная область – курсор, куда помещается результат выполнения последнего (текущего) запроса пользователя.
Рис.7.5. Информационные потоки в БД
Приведем основные рекомендации по написанию запросов, удобных для оптимизатора и эффективных при выполнении.
Например, для получения списка сотрудниц второго отдела при условии, что во втором отделе сотрудников около 5% от общего числа сотрудников, а женщин на предприятии – примерно половина, запрос должен выглядеть так:
SELECT * FROM empWHERE depNo=2 AND sex='ж';Например, список пациентов по отделениям №№1,2:
SELECT * FROM patients p, depart dWHERE d.id IN (1,2) AND p.depNo=d.id;Например, список всех хирургов:
SELECT * FROM doctorsWHERE special>'A' AND special like '%хирург%';Здесь условие special>'A' не исключает из поиска ни одной записи таблицы, но позволяет системе проводить этот поиск по индексу, который занимает гораздо меньше памяти, чем сама таблица.
Например, запрос на выборку названия отделения №3:
id – это первичный ключ, по нему есть индекс. Но при доступе через индекс потребуется минимум два обращения к диску. Включение индексированного поля в выражение (id*1 вместо id) подавляет использо-вание индекса.
Но для подзапросов, выдающих большой список, более оптимальным может оказаться вариант запроса с соединением (при наличии индекса по внешнему ключу):
SELECT DISTINCT e.* FROM Emp AS е, Children AS сWHERE с.empNo=e.empNo;а если индексы есть, то таким:
SELECT * FROM PatientsWHERE room=3UNION ALLSELECT * FROM PatientsWHERE diagnose LIKE 'грипп%';Например, список сотрудников всех отделов (10% от общего числа), кроме сотрудников центрального офиса (отдел №3) будет выглядеть так:
SELECT * FROM EmpWHERE deptNo3;При настройке команд SQL важно помнить, что, настраивая одну из них, можно оказать влияние (и не всегда позитивное) на другие команды. Поэтому во время настройки необходимо периодически осуществлять регрессионное тестирование, т.е. повторный запуск уже протестированных команд для оценки времени их выполнения.
Многие СУБД позволяют просмотреть план выполнения запроса средствами администрирования. Так можно убедиться в том, что система использует поостренные индексы для выполнения запросов.
"Сложная система, спроектированная наспех, никогда не работа-ет, и исправить её, чтобы заставить работать, невозможно". | |
Законы Мерфи. 16-й закон системантики |
Дата публикования: 2014-11-26; Прочитано: 400 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!