Spec-Zone .ru
спецификации, руководства, описания, API
|
Основные соображения для того, чтобы оптимизировать запросы:
Сделать медленное SELECT ... WHERE
запросите быстрее,
первая вещь проверить состоит в том, можно ли добавить индексирование.
Установленный индексирует на столбцах, используемых в WHERE
пункт, чтобы
ускорить оценку, фильтрацию, и заключительное извлечение результатов. Чтобы избежать потраченного
впустую дискового пространства, создайте маленький набор, индексирует, которые ускоряют много связанных
запросов, используемых в Вашем приложении.
Индексирует особенно важны для запросов что ссылка различные таблицы, используя функции, такие как
соединения и внешние
ключи. Можно использовать EXPLAIN
оператор, чтобы определить, который индексирует,
используется для a SELECT
. См. Раздел
8.3.1, "Использование MySQL How Индексирует" и Раздел
8.8.1, "Оптимизируя Запросы с EXPLAIN
".
Изолируйте и настройте любую часть запроса, такого как вызов функции, который занимает время. В зависимости от того, как структурируется запрос, функция могла быть вызвана однажды для каждой строки в наборе результатов, или даже однажды для каждой строки в таблице, значительно увеличивая любую неэффективность.
Минимизируйте число полных сканирований таблицы в Ваших запросах, особенно для больших таблиц.
Усовершенствуйте табличную статистику при использовании ANALYZE TABLE
оператор периодически, таким образом, оптимизатору
нуждались в информации, чтобы создать эффективный план выполнения.
Изучите настраивающиеся методы, индексируя методы, и параметры конфигурации,
которые являются определенными для механизма хранения для каждой таблицы. Оба InnoDB
и MyISAM
имейте наборы направляющих линий для включения и поддержки высокой
производительности в запросах. Для получения дополнительной информации см. Раздел
8.5.5, "Оптимизируя InnoDB
Запросы" и Раздел
8.6.1, "Оптимизируя MyISAM
Запросы".
В частности в MySQL 5.6.4 и выше, можно оптимизировать транзакции единственного
запроса для InnoDB
таблицы, используя метод в Разделе
14.2.4.2.3, "Оптимизация для Транзакций Только для чтения".
Избегите преобразовывать запрос способами, которые делают его трудно, чтобы понять, особенно если оптимизатор делает некоторые из тех же самых преобразований автоматически.
Если проблема производительности легко не решается одной из основных направляющих
линий, исследуйте внутренние детали определенного запроса, читая EXPLAIN
запланируйте и корректировка Вашего индексирует, WHERE
пункты, пункты соединения, и так далее. (Когда Вы достигаете
определенного уровня экспертизы, читая EXPLAIN
план мог бы быть Вашим первым шагом для каждого запроса.)
Скорректируйте размер и свойства областей памяти, которые MySQL использует для
того, чтобы кэшироваться. С эффективным использованием InnoDB
пул буферов, MyISAM
ключевой кэш, и MySQL запрашивают кэш, повторенные запросы,
выполненные быстрее, потому что результаты получаются из памяти вторые и последующие разы.
Даже для запроса, который выполняет быстро использование областей кэш-памяти, Вы могли бы все еще оптимизировать далее так, чтобы они потребовали меньшего количества кэш-памяти, подавая Вашу более масштабируемую заявку. Масштабируемость означает, что Ваше приложение может обработать больше одновременных пользователей, больших запросов, и так далее не испытывая большое понижение производительности.
Соглашение с блокировкой проблем, где на скорость Вашего запроса могли бы влиять другие сеансы, получающие доступ к таблицам одновременно.