По мере роста объема ваших баз данных может потребоваться изменить стандартные настройки, которые MySQL использует для управления сервером. Хотя скорость процессора, большие и более быстрые жесткие диски, а также дополнительная память определенно имеют отношение к производительности, речь пойдет не о них. Цель этой главы - показать способы повышения производительности с помощью средств, доступных в MySQL, и обучить вас приемам, благодаря которым ваши запросы будут выполняться с наибольшей эффективностью.
Структура базы данных - еще один аспект, влияющий на производительность. В этом разделе также обсуждаются различные методы оптимизации таблицы для повышения производительности. Однако большей частью первоочередная оптимизация состоит в усовершенствовании запросов, добавлении индексов и т.д. Следовательно, в первую очередь в этой главе рассматривается оптимизация запросов.
Для повышения производительности в первую очередь надо обратить внимание на запросы, особенно те из них, которые выполняются наиболее часто. Чтобы получить представление о том, какие запросы можно улучшить, воспользуйтесь журналом запросов MySQL (см. главу 15, "Обслуживание, резервное копирование и восстановление").

Индексирование
Огромное количество людей в Internet-форумах спрашивают что можно сделать с медленными запросами, не попробовав добавить индекс к часто используемому столбцу. Как вам известно из главы 8, "Обработка баз данных и таблиц", таблицы со столбцами, запрашиваемыми наиболее часто, можно упорядочить, создав индекс. Индекс указывает место в базе данных, где находятся определенные данные, а создание индекса столбца сортирует информацию в этом столбце. Когда серверу для выполнения запроса нужен доступ к этой информации, он сразу по индексу "знает", где ее искать. 
Индексирование еще более важно в запросах, в которых задействовано сразу несколько таблиц. Если для полного сканирования одной таблицы нужно время, представьте, насколько больше времени потребуется для просмотра нескольких таблиц. Если ваша цель - оптимизация запросов, то начинать всегда следует с индексирования.
Если у вас есть столбец, задействованный в поиске, группировании или сортировке, то его индексирование, скорее всего, приведет к повышению производительности. Это касается столбцов, которые являются частью операции объединения, или столбцов, которые связаны с операторами WHERE, GROUP BY или ORDER BY.
Рассмотрим следующий пример.
Листинг 16.1.
mysql> SELECT salary FROM empData JOIN empMaster ON empData.sid = emp-Master.id WHERE salary > 50000;
Индексированию подлежат столбцы empData.sid и empMaster.id, так как они яв­ляются частью объединения. Так как столбец salary также входит в предложение WHERE, его тоже неплохо было бы индексировать.
Также следует учесть, что индексирование столбцов с большим количеством повто­ряющихся значений не дает хороших результатов. Индексирование столбца со значениями "yes" или "no" ничего не улучшит. С другой стороны, индексирование столбца, где значения уникальны (например, номера социального обеспечения служащих), будет очень полезным.
Для увеличения производительности вы можете ассоциировать несколько неуникальных индексов с таблицей. В предыдущем примере столбцы empData.sid, empMas-ter.id и salary вполне можно индексировать. Количество неуникальных индексов ничем не ограничено.