Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная РЭИС.docx
Скачиваний:
2
Добавлен:
21.11.2019
Размер:
41 Кб
Скачать
☆

3) Физические характеристики бд.

При работе с БД существует несколько проблем:

  • Для быстрого доступа к записям таблицы БД необходимо, чтобы таблица физически занимала в БД непрерывный блок страниц. Поскольку при добавлении новых страниц СУБД не делает попыток выделять смежные страницы для хранения одной и той же БД, то данные, относящиеся к одной странице БД, могут быть фрагментированы.

  • При каждом изменении записи фактически создается ее новая версия. Версии записей, измененные или добавленные транзакциями, которые впоследствии отменяются, из БД не удаляются. Кроме того, при удалении записей не происходит перемещения оставшихся записей с тем, чтобы удалить образовавшиеся «дыры» в БД. Хранение множественных поколений записей приводит к сильному «загрязнению» БД и замедляет работу с ней.

Решением этих проблем является периодическое создание резервной копии и восстановление из нее БД, при этом:

  • собирается «мусор», т.е. версии записей, которые далее не будут востребованы;

  • устраняются «дыры» на страницах БД, образовавшиеся после удаления записей;

  • каждая таблица размещается в непрерывном блоке страниц;

Кроме того, важным моментом является размер самой страницы БД. Запись таблицы БД должна размещаться максимум на одной странице БД. Как известно, запись/чтение в БД осуществляется страницами, поэтому, если размер страницы мал для хранения одной записи и она располагается на более чем одной странице, то для чтения такой записи требуется выполнить несколько физических операций чтения. Но и размер страницы не должен быть слишком большим, т.к. в этом случае будут считываться ненужные записи.

Размер буфера ввода-вывода также оказывает влияние на быстродействие при работе с БД. Для БД, к которым чаще применяются операции чтения требуется увеличить размер буфера, а для БД, в которых чаще применяются операции записи данных, размер буфера следует уменьшить.

Оптимизация запросов.

Оптимизация запросов к БД связана с построением адекватной запросам и оптимальной структуры индексов таблиц БД и оптимизацией собственно текстов запросов.

1) Оптимальная структура индексов.

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

2) Эффективность индексов при поиске информации в таблице полностью зависит от того, построен пи индекс по уникальным значениям, а если нет, то насколько отличаются данные, по которым он построен.

Например: select * from usp where ocenka>3 and udate='2009-06-10'

При выполнении запроса SQL определить существуют ли индексы, построенные по столбцам OCENKA и UDATE (совместно или отдельно). Если таких индексов нет, то поиск записей, удовлетворяющих условию, будет происходить путем перебора всех записей таблицы, что обеспечивает наименьшую эффективность выполнения запроса.

В случае наличия нескольких индексов (и совместно и отдельно), выбирается тот, у которого выше показатель полезности. Показатель полезности индекса рассчитывается как число различающихся значений индексных полей внутри индекса, отнесенное к среднему количеству записей. Этот показатель рассчитывается при создании индекса. При внесении изменений в таблицу, по которой построении индекс, меняется степень отличия значений столбцов, по которым построении индекс.

Среднее количество записей - показатель, который рассчитывается всякий раз при оптимизации запроса, как количество страниц БД, занятых этой таблицей, деленной на максимальное число записей страницы. Уменьшение числа страниц и устранение «дыр» на ней ведут к уменьшению показателя среднего числа записей и, как следствие, к повышению показателя полезности индекса.

Таким образом, индексы следует создавать в случае, когда по столбцу или группе столбцов часто:

  • производится поиск в БД, т.е. столбцы перечисляются в предложении WHERE запроса SELECT;

  • строятся объединения таблиц;

  • производится сортировка НД, возвращаемых в качестве результата запроса, т.е. столбцы используются в предложении ORDER BY запроса SELECT.

Не рекомендуется строить индексы по столбцам, если они:

  • редко используются для поиска, объединения или сортировки результатов запроса;

  • содержат часто меняющиеся значения, что приводит к необходимости частого обновления индексов и может замедлить скорость работы с БД;

  • содержат небольшое количество вариантов значений.

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

Например:

select * from usp where pnum=:pnum and udate =:udate

select * from use where pnum=:pnum and udate =: udate and snum=: snum

Построив индекс по полям pnum, snum и udate можно повысить эффективность выполнения обоих запросов. Однако при использовании части составного индекса следует учитывать их последовательность.

Например: select * from usp order by snum, pnum

4) Уменьшение общего количества индексов. Следует стремиться к уменьшению количества индексов, т.к. при большом их количестве снижается скорость добавления, изменения и удаления данных в таблице БД. Как правило, в БД определено два вида индексов:

  • индексы, фактически использующиеся запросами для доступа к данным;

  • индексы, введенные в БД для обеспечения ссылочной целостности между внешними и родительскими таблицами.

Если индексы не используются при доступе к данным, их следует удалять, а ссылочную целостность обеспечивать с помощью индексов.