6.1. Оптимизация структуры данных

6.1. Оптимизация структуры данных

Если «узким местом» вашей базы данных является одна или несколько таблиц, попробуем скорректировать структуру этих таблиц:

• выбрать наиболее подходящий тип таблицы;

• минимизировать объем данных в таблице;

• пересмотреть набор индексов в таблице;

• указать необходимые значения опциональных параметров.

Как было сказано в предыдущих главах, каждый тип таблиц имеет свои преимущества и недостатки. Если требуется обеспечить высокую производительность операций чтения данных (например, таблица будет использоваться главным образом для анализа содержащихся в ней данных или для генерации динамических веб-страниц), предпочтительным типом такой таблицы является MyISAM. Если же данные в таблице будут редактироваться множеством пользователей (это часто происходит в корпоративных базах данных), желательно присвоить таблице тип InnoDB. В разделе 6.4 «Проблемы, связанные с блокировками» мы рассмотрим особенности блокировки для каждого типа таблицы.

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

• Хранение мультимедийных данных (изображений, аудио– и видеозаписей) не в базе данных, а в файловой системе.

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

• Подбор типов столбцов с наименьшим размером.

Например, если значения в целочисленном столбце не могут превышать 10 000, целесообразно объявить его как SMALLINT, а не INT или MEDIUMINT. Определить диапазон возможных значений столбца вы можете с помощью запроса

SELECT <Список столбцов> FROM <Имя таблицы> PROCEDURE ANALYSE();

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

• Указание свойства NOT NULL для всех столбцов, для которых это возможно.

Если в столбце не предполагается использовать неопределенные значения, задание свойства NOT NULL позволит уменьшить длину каждого значения на 1 бит.

Исключением из правила минимизации объема данных является использование статического формата таблиц. Другими словами, если в таблице с типом MyISAM отсутствуют символьные столбцы, допускающие значения переменной длины (такие как VARCHAR, TEXT, BLOB и т. п.), то такая таблица по умолчанию сохраняется в статическом формате; если же в таблице есть столбцы с переменной длиной значений, то по умолчанию применяется динамический формат. Как правило, динамические таблицы занимают значительно меньше места, чем статические, однако статические таблицы работают намного быстрее.

Данный текст является ознакомительным фрагментом.