Оптимизация работы СУБД MySQL | Все что вы хотели знать о хостинге и сайтостроении

Оптимизация работы СУБД MySQL


Рубрика: MySQL

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

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

Данные для хранения в MySQL

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

Составление запросов для базы данных

Удобным инструментом для поиска информации в базе данных является ключ LIMIT для функции SELECT, который позволяет получать не все данные, хранящиеся в MySQL, а только их определенную порцию.

  • Рассмотрим пример создания запросов к категории товаров интернет-магазина. Как правило, в подобных случаях информация выдается по 10 позиций, после изучения которых пользователю предлагается получить доступ к следующей десятке. Гораздо проще для этого использовать не выборку и фильтрацию вывода скриптом, а запрос вида:

Select good, price from boks limit 20,10

В этом примере «20» — позиция, с которой начнется выдача записей, «10» — количество записей, которые будут выданы.

  • Составляя запрос к базе данных (SQL queries), запрашивайте только действительно нужную в текущий момент информацию. Например: в базе имеется 10 полей. По запросу:

Select * from table_name

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

select field1, field2 from table_name

Это избавит MySQL от выполнения лишней работы.

  • Ключ WHERE позволяет сортировать выводимую информацию по некоторому шаблону:

Select title from books where author=’Иванов

По этому запросу пользователь получить названия книг под авторством Иванова.

  • Ключ LIKE можно использовать для того, чтобы расширить поиск по предыдущему запросу:

Select title from books where author like=’Иванов

В этом случае будут выданы названия тех книг, в которых значение поля author начинается с ‘Иванов’.

Операции, требующие большого количества ресурсов

Некоторые операции отличаются большой ресурсоемкостью. Например, в отличие от обычного запроса SELECT, операция DISTINCT потребляет гораздо больше процессорного времени. Эта ресурсоемкая операция не просто выполняет поиск информации, но и анализирует полученные данные на уникальность. Для этого приходится выполнять множество подстановок, сравнений и расчетов. Причем при увеличении объема базы, рост количества ресурсов, необходимых для выполнения DISTINCT, происходит очень и очень быстро.

Использование индексов

Индексы позволяют ускорить процесс поиска по заданному значению одного из полей базы. Без использования индексов, MySQL просматривает все поля – с первой до последней записи, сопоставляя выбранное значение с исходным. Естественно, что время, необходимое на выполнение выборки, напрямую зависит от размеров обрабатываемой таблицы. Если рассматриваемый столбец таблицы имеет индекс, MySQL совершает быстрое позиционирование к заданному столбцу, не просматривая остальные данные.

Соединение с MySQL-сервером

Установка соединения – процесс, требующи немалого времени. Нередко соединение устанавливается дольше, чем обрабатывается запрос. Логично постараться свести потребность в соединении с сервером к минимуму. Для этого не стоит обрывать его после каждой выполненной операции.

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

Если вам понравилась статья или была полезна, поделитесь ею с друзьями: