Научная статья на тему 'ОПТИМИЗАЦИЯ ЗАПРОСОВ В СУБД MYSQL'

ОПТИМИЗАЦИЯ ЗАПРОСОВ В СУБД MYSQL Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
215
15
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СУБД / БАЗА ДАННЫХ / ОПТИМИЗАЦИЯ ЗАПРОСА / ИНДЕКС / ОПЕРАТОР

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Терин М. В.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Терин М. В.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

QUERY OPTIMIZATION IN DBMS MYSQL

The paper considers various methods of query optimization, both provided by the DBMS itself, and implemented by the user independently. Considered methods such as query caching, indexing, query restructuring, query decomposition.

Текст научной работы на тему «ОПТИМИЗАЦИЯ ЗАПРОСОВ В СУБД MYSQL»

удалятьлюбые объекты наполнения сайта, фиксируя все совершенные действия, а также предоставляет интерфейс для управления пользователями и группам. [3]

Django проектировался для работы под управлением Apache с модулемmodpython и с использованием PostgreSQL в качестве базы данных.

В составе Django присутствует собственный WEB-сервер дляразработки. Сервер автоматически определяет изменения в файлах исходногокода проекта и перезапускается, что очень ускоряет процесс разработки rnPython. Но при этом он работает в однопотоковом режиме и пригоден толькодля процесса разработки и отладки приложения. [4]

Использованные источники:

1. Исаев А.Н., Сныткин Д.С., Юлин Д.В., Полукаров Д.Ю. Опыт проведения олимпиад по программированию на платформе проверяющей системы ПГУТИ // Российская научно-методическая конференция профессорско-преподавательского состава, научных сотрудников и аспирантов: материалы конференции / ПГУТИ - Самара, 2013. - С. 19-20.

2. Горбачевская Е. Н., Марфин С. Г. Мониторинг виртуальной вычислительной системы //Вестник Волжского университета им. ВН Татищева. - 2010. - №. 16.

3. Ковалев Д. А. Методы и средства разработки электронных учебников. Технология Django для веб-приложений на языке Python //Вестник Волжского университета им. ВН Татищева. - 2009. - №. 13.

4. Django - это... Что такое Django? [Электронный ресурс] - Режим доступа: http://dic.academic.ru/dic.nsf/ruwiki/112537, свободный. - Загл. с экрана.

УДК 004.657

Терин М.В. студент 4 курса

факультет информационных систем и технологий Поволжский Государственный Университет Телекоммуникаций и Информатики

Россия, г. Самара

Terin M. V., 4th year student Faculty of Information Systems and Technologies Volga State University of Telecommunications and Informatics

Russia, Samara ОПТИМИЗАЦИЯ ЗАПРОСОВ В СУБД MYSQL Аннотация:

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

Ключевые слова: СУБД, MySQL, база данных, оптимизация запроса, индекс, оператор.

QUERY OPTIMIZATION IN DBMS MYSQL

Annotation:

The paper considers various methods of query optimization, both provided by the DBMS itself, and implemented by the user independently. Considered methods such as query caching, indexing, query restructuring, query decomposition.

Key words: DBMS, MySQL, database, query optimization, index, operator.

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

Язык SQL, как основной инструмент работы с базами данных, играет первостепенную роль в вопросе разработки СУБД, а также администрирования баз данных. Так как базы данных во многих сферах могут достигать очень больших объемов (как по количеству таблиц, записей и полей, так и по общему объему хранимой информации), то естественно встает вопрос об эффективной, с точки зрения быстродействия, работы с этими данными.

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

Для того чтобы эффективно взаимодействовать с СУБД MySQL, необходимо понимать принципы функционирования сервера, а также иметь представление о совместной работе различных компонентов MySQL.

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

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

(например, функции работы с датами и временем, математические функции, шифрование). На этом уровне реализуется любая независимая от подсистемы хранения данных функциональность, например, хранимые процедуры, триггеры и представления.

Третий уровень содержит подсистемы хранения данных. Они отвечают за сохранение и извлечение всех данных, хранимых в MySQL. Подобно различным файловым системам GNU/Linux, каждая подсистема хранения данных имеет свои сильные и слабые стороны. Сервер взаимодействует с ними с помощью API (интерфейса прикладного программирования) подсистемы хранения данных. Этот интерфейс скрывает различия между подсистемами хранения данных и делает их почти прозрачными на уровне запросов. Кроме того, данный интерфейс содержит пару десятков низкоуровневых функций, выполняющих операции типа «начать транзакцию» или «извлечь строку с таким первичным ключом». Подсистемы хранения не производят синтаксический анализ кода SQL и не взаимодействуют друг с другом, они просто отвечают на исходящие от сервера запросы. MySQL поддерживает различные подсистемы хранения данных: MylSAM, MylSAM Merge, InnoDB, Memory, Archive и некоторые другие.

Существует великое множество методов оптимизации запросов. В этой статье будут рассматриваться только самые распространенные и эффективные из них.

При конструировании запросов часто приходится отвечать на важный вопрос: не лучше ли будет разбить сложный запрос на несколько более простых? Традиционно при проектировании базы данных стараются сделать как можно больше работы с помощью наименьшего числа запросов. Исторически такой подход был оправдан из-за высокой стоимости сетевых коммуникаций и накладных расходов на разбор и оптимизацию. Но к MySQL данная рекомендация относится в меньшей степени, поскольку эта СУБД изначально проектировалась так, чтобы установление и разрыв соединения происходили максимально эффективно, а обработка небольших простых запросов выполнялась очень быстро.

Другой способ уменьшить сложность запроса состоит в применении тактики «разделяй и властвуй», когда выполняется по существу один и тот же запрос, но каждый раз из него возвращается меньшее число строк. Отличный пример - удаление старых данных.

На многих высокопроизводительных сайтах применяется техника декомпозиции соединений (join decomposition). Смысл ее заключается в том, чтобы выполнить несколько однотабличных запросов вместо одного запроса к нескольким объединенным таблицам, а соединение выполнить уже вне СУБД.

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

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

Также перечислим некоторые конкретные типы запросов, которые можно оптимизировать.

Оптимизация запросов с COUNT(). Это особая функция, которая решает две очень разные задачи: подсчитывает значения и строки. Если указать имя столбца или какое-нибудь другое выражение в скобках, то COUNT( ) посчитает, сколько раз это выражение имеет значение. Вторая форма COUNT() просто подсчитывает количество строк в результирующем наборе. Так MySQL поступает, когда точно знает, что выражение внутри скобок не может быть равно NULL.

Оптимизация запросов с JOIN. При работе с этим оператором следует придерживаться следующих правил:

• Строить индексы по столбцам, используемым во фразах ON или USING.

• По возможности делать так, чтобы в выражениях GROUP BY и ORDER BY встречались столбцы только из одной таблицы.

Оптимизация UNION. MySQL всегда выполняет запросы с UNION путем создания и заполнения временной таблицы. К подобным запросам MySQL может применить не так уж много оптимизаций. Однако есть возможность упростить работу оптимизатору, «опустив вниз» фразы WHERE, LIMIT, ORDER BY и другие условия (то есть переместить их из внешнего запроса в каждый SELECT, входящий в объединение).

Использованные источники:

1. MySQL. Оптимизация производительности, 2-е издание. [Текст] / Шварц Б.[и др.] - СПб: Символ-Плюс, 2010. - 832 с.

2. М. Грабер. SQL для простых смертных [Текст] /М.Грабер-М: Лори, Москва, 2014. - 378 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.