6.2. Оптимизация запросов
6.2. Оптимизация запросов
Основным способом повышения производительности запросов являются индексы. Определить, действительно ли созданные вами индексы используются запросом, позволяет команда
EXPLAIN <Текст запроса>;
Набор данных, выводимый командой EXPLAIN, содержит детальную информацию о ходе выполнения запроса. Каждая строка в этом наборе описывает одну из операций, составляющих запрос. Например, команда
EXPLAIN SELECT name,address,product_id,qty
FROM Customers, Orders
WHERE Customers.id=customer_id AND date='20007-12-12выводит результат, представленный в табл. 6.1. Таблица 6.1. Результат выполнения команды EXPLAIN
Столбец table (таблица) содержит имя обрабатываемой таблицы, а столбец select_type (тип запроса) указывает место операции в структуре запроса:
• SIMPLE – простой запрос без вложенных запросов и UNION;
• PRIMARY – первый запрос в UNION или внешний запрос, имеющий вложенные запросы;
• UNION – второй и последующие запросы в объединении UNION;
• DEPENDENT UNION – второй и последующие вложенные запросы в объединении UNION, связанные с внешним запросом (о связанных подзапросах вы узнали в подразделе «Операторы сравнения с результатами вложенного запроса»);
• UNION RESULT – операция объединения результатов запросов;
• SUBQUERY – вложенный запрос;
• DEPENDENT SUBQUERY, UNCACHEABLE SUBQUERY – вложенный запрос, связанный с внешним запросом;
• DERIVED – запрос, генерирующий промежуточный результат (такой запрос следует после ключевого слова FROM).
В столбце rows (строки) содержится оценка количества строк таблицы, которое потребуется просмотреть для данной операции. Если ваш запрос имеет сложную структуру, значения в столбце rows помогут вам выявить его «узкие места».
Столбец possible_keys (возможные индексы) показывает, какие индексы из числа существующих в таблице программа MySQL могла бы использовать при выполнении запроса. Если этот столбец содержит значение NULL, а вы считаете необходимым ускорить операцию, добавьте в таблицу подходящие индексы (рекомендации по созданию индексов были изложены в предыдущем разделе).
Возможна ситуация, когда нужный индекс существует, но программа MySQL не применяет его, считая по каким-либо причинам, что просматривать таблицу полностью будет эффективнее. Индекс, фактически используемый при выполнении запроса, отображается в столбце key (индекс); если данный столбец содержит значение NULL, значит, программа MySQL не выбрала ни один из доступных индексов. Если вы, тем не менее, считаете, что индекс должен использоваться, выполните следующие действия:
1. Обновите статистику распределения индексов в таблице с помощью командыANALYZE TABLE <Имя таблицы>;
2. Повторно выполните команду EXPLAIN. Если и после обновления статистики индекс не начал использоваться, добавьте в текст запроса после имени таблицы параметр FORCE INDEX (<Имя индекса>). Сравните время выполнения запроса с параметром FORCE INDEX и без него и выберите оптимальный вариант.
Помимо введения индексов, существуют и другие способы ускорения запросов. Вот наиболее простые из них.
• Исключите получение лишней информации из базы данных. Результат запроса должен содержать только те данные, которые действительно необходимы. Например, если вы отображаете на веб-странице не более 20 товаров, не нужно получать из таблицы Products (Товары) все данные. Вместо этого используйте запросы видаSELECT <Список столбцов> FROM <Список таблиц>
[WHERE <Условие отбора>]
…
LIMIT <Количество строк> OFFSET <Сдвиг>;Так, для получения первой «порции» из 20 товаров выполните запрос
SELECT * FROM Products LIMIT 20 OFFSET 0;
Следующих 20 товаров —
SELECT * FROM Products LIMIT 20 OFFSET 20;
Затем
SELECT * FROM Products LIMIT 20 OFFSET 40;
и т. д.
• Максимально упростите систему привилегий доступа. Чем сложнее система привилегий, тем больше времени занимает проверка прав доступа при выполнении запросов (а также других SQL-команд). Хорошим решением является разграничение доступа на уровне баз данных и отказ от присвоения привилегий доступа к отдельным таблицам и столбцам. В этом случае контроль действий пользователей не требует обращения к таблицам tables_priv и columns_ priv (см. подраздел «Просмотр привилегий»).
• Если запрос содержит выражение, проверьте, не является ли вычисление этого выражения причиной замедления запроса. Для этого выполните командуSELECT BENCHMARK(<Количество повторений>,<Выражение>);
Функция BENCHMARK() всегда возвращает значение 0, однако в сообщении о результате выполнения команды указывается время ее выполнения, благодаря чему вы можете оценить время вычисления выражения. Например, если ваш запрос включает вычисление синуса для каждой строки таблицы, выполните команду
SELECT BENCHMARK(10000000,SIN(1));
При использовании процессора с тактовой частотой 1,6 ГГц выполнение этой команды займет приблизительно 1 с. Таким образом, программа MySQL способна производить около 10 млн вычислений синуса в секунду, а значит, функция SIN() не оказывает существенного влияния на скорость запроса. Итак, мы рассмотрели способы оптимизации таблиц и запросов. В следующем разделе вы узнаете о том, как увеличить быстродействие сервера путем настройки системных переменных.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Очереди запросов
Очереди запросов Для блочных устройств поддерживаются очереди запросов (request queue), в которых хранятся ожидающие запросы на выполнение операций блочного ввода-вывода. Очередь запросов представляется с помощью структуры request_queue, которая определена в файле <linux/blkdev.h>.
Количество DNS-запросов
Количество DNS-запросов Система DNS устанавливает соответствие имен хостов их IP-адресам, точно так же как телефонный справочник позволяет узнать номер человека по его имени. Когда вы набираете «www.yahoo.com» в адресной строке браузера, преобразователь DNS, к которому обратился
Формирование запросов
Формирование запросов Если вы не хотите углубляться в детали техники поиска, то можете просто задать поисковой машине вопрос так же, как задали бы его человеку, у которого хотите получить совет. Например, «как быстро похудеть», «есть ли жизнь на Марсе», «где раки зимуют»
Поисковая оптимизация
Поисковая оптимизация Под поисковой оптимизацией (англ. Search Engine Optimization, SEO) понимается комплекс работ по корректировке внутреннего устройства сайта и внешних факторов с целью усиления позиции сайта по определенным запросам в поисковых системах.Поисковые системы — это
1.3.3. Язык запросов
1.3.3. Язык запросов Для того чтобы Яндекс корректно понимал запросы, состоящие из нескольких слов, был разработан специальный язык запросов. Отдельные его элементы мы уже рассмотрели — это и специальные символы, используемые в обычном поиске, и дополнительные параметры,
10.1.3. Язык запросов
10.1.3. Язык запросов Язык запросов, используемый в Яndex.Server, в полной мере соответствует языку запросов, с которым работает поисковая система Яндекс. Поэтому все, что можно использовать для поиска в Интернете, новостях, среди картинок, поддерживается и в версии программы,
Оптимизация
Оптимизация Теперь сайт работает точно так, как и планировалось. Вы открываете доступ всем желающим, и начинается веселье.Если вы аккуратно и точно выполнили все необходимые действия, не торопясь, прошли каждый этап создания сайта, то настало время переходить к
Оптимизация сайта
Оптимизация сайта Поговорим о том, как лучше оформить сайт для того, чтобы он способствовал продвижению в социальных сетях и соответствовал поставленным задачам. Сайт – это точка вашего контакта с клиентом, первая и основная. У вашего сайта должны быть хороший дизайн и
12 Оптимизация
12 Оптимизация Преждевременная оптимизация — корень всех зол. —Ч. Хоар Данная глава очень короткая, поскольку главное, чему учит опыт Unix относительно оптимизации производительности, — как узнать, когда не следует выполнять оптимизацию. Второстепенный урок заключается
12 Оптимизация
12 Оптимизация Преждевременная оптимизация — корень всех зол. -Ч. Хоар Данная глава очень короткая, поскольку главное, чему учит опыт Unix относительно оптимизации производительности, — как узнать, когда не следует выполнять оптимизацию. Второстепенный урок заключается в
Планы запросов
Планы запросов Перед выполнением запроса комплект программ подготовки - известный как оптимизатор- начинает анализировать столбцы и операции запроса для вычислен? самого быстрого способа выполнения. Подготовка начинается с просмотра индексов таблицы и используемых
33.6. Оптимизация
33.6. Оптимизация По большей части, сценарии на языке командной оболочки, используются для быстрого решения несложных задач. Поэтому оптимизация сценариев, по скорости исполнения, не является насущной проблемой. Тем не менее, представьте себе ситуацию, когда сценарий,
Типы запросов
Типы запросов Запрос SQL – это запрос, создаваемый при помощи инструкций SQL [15] .Запросы являются основным средством просмотра, изменения и анализа информации, которая содержится в одной или в нескольких таблицах базы данных. В этой главе, а также в главах 10 и 12,
Язык запросов
Язык запросов Для более профессионального поиска существует специальный язык запросов. Рассмотрим использование этого языка на примере поиска слов песни «Яблоки на снегу». Ничего личного! Я не предлагаю вам петь эту песню. Ну, случайно пришла на ум. Можете потом поискать
Оптимизация вызовов
Оптимизация вызовов На уровнях 2 и 3 неизбежно использование явных вызовов процедуры подобных my_polygon.set_size (5) для изменения значения атрибута. Существует опасение, что использование такого стиля на уровне 4 негативно скажется на производительности. Тем не менее компилятор