MySQL 5.0 - Библиотека Программиста

Печать

Если вы все же используете динамические таблицы MyISAM, необходимо учитывать, что изменение данных в такой таблице может привести к ее фрагментации. Так, если значение в символьном столбце заменяется более длинным, то строка таблицы разделяется на две (или более) части, которые хранятся отдельно друг от друга. Фрагментация сказывается на скорости доступа к данным, поэтому динамическую таблицу рекомендуется время от времени (в зависимости от интенсивности изменений) дефрагментировать с помощью команды OPTIMIZE TABLE <Имя таблицы>;

Следующий этап оптимизации - настройка набора индексов. Индекс для столбца таблицы позволяет многократно ускорить поиск с условием на значение этого столбца, сортировку (ORDER BY) и группировку (GROUP BY) по значениям столбца, вычисление максимального и минимального значения, а также объединение таблиц. Благодаря наличию индекса выполнение всех этих операций не потребует последовательного перебора всех строк таблицы.

Для максимально эффективного использования индексов необходимо учитывать следующие факты.

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

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

При создании индекса для группы столбцов важно правильно выбрать последовательность столбцов в индексе, так как в запросах может применяться часть многостолбцового индекса, состоящая из нескольких начальных столбцов. Например, если в таблицу Orders (Заказы) добавить индекс

INDEX (date,product_id,customer_id)

то он ускорит выполнение запросов

SELECT * FROM Orders WHERE date=CURDATE();

SELECT * FROM Orders

WHERE date=CURDATE() ANDproduct_id=3;

но будет бесполезен при выполнении запросов

SELECT * FROM Orders WHEREproduct_id=3;

SELECT * FROM Orders

WHEREproduct_id=3 AND customer_id=533;

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

Наконец, для повышения производительности таблиц вы можете использовать следующие опциональные свойства таблицы:

• AVG_ROW_LENGTH <Размер в байтах>, MAX ROWS <Количество строк>.

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

• DELAY KEY WRITE 1.

243




Здоровье ценят дороже косметики - орифлейм каталог. Консультантам Орифлейм.