Skip to content

Обзор индексов в MySQL: B-Tree индексы FULLTEXT

Пересказ статьи Lukas Vileikis. MySQL Index Overviews FULLTEXT B-Tree Indexes


Что такое полнотекстовое индексирование?


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

Полнотекстовое индексирование работает аналогичным образом во многих системах управления базами данных и существенно не менялось годами - загляните в блог Роберта Шелдона, посвященного полнотекстовому поиску более двух десятилетий назад, и вы конечно найдете что-нибудь, что изменилось в вашей установке SQL Server, но вы также обнаружите множество вещей, которые остались неизменными; и то же самое можно сказать о других системах управления базами данных.
Continue reading "Обзор индексов в MySQL: B-Tree индексы FULLTEXT"

Понимание запросов списка процессов MySQL: руководство по мониторингу и оптимизации производительности

Пересказ статьи Dmitry Romanoff. Understanding MySQL Process List Queries: A Guide to Monitoring and Optimizing Performance


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

1. Просмотр всех процессов


Чтобы получить исчерпывающий обзор всех текущих процессов на сервере MySQL, вы можете использовать следующий запрос:

SELECT * FROM information_schema.processlist;


Continue reading "Понимание запросов списка процессов MySQL: руководство по мониторингу и оптимизации производительности"

Комментирование в MySQL: синтаксис, версии и примеры

Пересказ статьи DbVisualizer. Commenting in MySQL: Syntax, Versions, and Examples


Хорошие комментарии кода SQL помогают разработчикам понять, что делает запрос и почему он имеется - особенно, когда логика сложна и имеется множество соединений. MySQL предлагает несколько способов добавить контекст к вашему коду: однострочные комментарии, многострочные блоки и даже уникальные для MySQL комментарии с представлением версии и указаниями оптимизатору.

В этой статье обсуждается каждый стиль, показано, как их эффективно использовать и объясняются некоторые нюансы, связанные с комментариями версий и хинтами.
Continue reading "Комментирование в MySQL: синтаксис, версии и примеры"

Предложение VALUES или создание таблиц из ничего

Автор: Joe Celko, The VALUES clause or building tables out of nothing


Предложение VALUES, вероятно, одна из самых неправильно используемых возможностей в SQL. Если вы посмотрите на онлайн-форумы по SQL, вы увидите, что люди используют его как второе предложение в операторе вставки, но используют его для построения только одной строки за раз, например так:



BEGIN
INSERT INTO Zodiac (astro_sign, astro_start_date, astro_end_date)
VALUES ('Aries', '2025-03-21', '2025-04-19');
INSERT INTO Zodiac (astro_sign, astro_start_date, astro_end_date)
VALUES ('Taurus', '2025-04-20', '2025-05-20');

INSERT INTO Zodiac (astro_sign, astro_start_date, astro_end_date)
VALUES ('Pisces', '2023-05-19', '2026-03-20');
END;


Каждый оператор вставки заканчивается точкой с запятой, поэтому они будут выполняться отдельно и в представленном порядке. Оптимизатор не осмеливается их объединять, потому что может быть прямая ссылка на предыдущие вставки.



Я думаю, люди пишут такой код, потому что именно так вы бы читали перфокарты. Каждая карта поступает в устройство чтения карт, буферизуется и записывается в порядке поступления на магнитную ленту или дисковый файл. Добро пожаловать в 1960-е! Перестаньте подражать старым языкам программирования, таким как FORTRAN или BASIC, в которых были операторы WRITE, помещающие по одной записи за раз в файл. Начните думать о работе с целыми множествами.

Continue reading "Предложение VALUES или создание таблиц из ничего"

Учёт интервалов времени

Автор: Джо Селко (Joe Celko)



SQL — первый язык программирования, в котором появились явные временные типы данных. Я давно полагаю, что если бы в Cobol изначально был тип TIMESTAMP, вся история с Y2K могла бы и не случиться. По крайней мере, сегодня всё больше людей знают о стандартах отображения даты и времени ISO 8601. Кто знает — может быть, их наконец начнут применять.

Continue reading "Учёт интервалов времени"

Детальное сравнение MariaDB и MySQL

Пересказ статьи Antonello Zanini. MariaDB vs MySQL: The Ultimate Comparison


MariaDB и MySQL - две из наиболее широко используемых СУБД, доля которых на рынке среди реляционных баз данных совместно составляет более 40%. Хотя они имеют общую базовую реализацию, некоторые фундаментальные различия делают их более подходящими для различных сценариев.

В этой статье сравнения MariaDB и MySQL мы обратимся к истории этих технологий, исследуем их подобие и различие, чтобы помочь вам развеять сомнения относительно применения этих двух баз данных.
Continue reading "Детальное сравнение MariaDB и MySQL"

Обзор индексов в MySQL: составные индексы B-Tree

Пересказ статьи Lukas Vileikis. MySQL Index Overviews: Composite B-Tree Indexes


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

Основной тип индекса в MySQL - это индекс B-Tree, рассмотренный нами в одной из предыдущих статей. Если вы работаете с MySQL, то определенно знаете также о других нюансах индексов, одним из которых является тот факт, что индексы B-Tree могут строиться на нескольких столбцах (обычно их называют составными индексами). В этом примере мы используем MariaDB, хотя Percona Server для MySQL и MySQL Server будут вести себя идентично.

В приложении вы найдете запросы, воссоздающие структуру таблиц и составные индексы, так что давайте начнем.
Continue reading "Обзор индексов в MySQL: составные индексы B-Tree"

Разница между CTE и подзапросами в SQL: полноценное руководство для разработчиков

Автор: Vivek Johari Difference Between CTE and Subqueries in SQL: A Complete Guide for Developers


Язык структурированных запросов (SQL) — основа манипулирования и извлечения данных в современных базах. Будь то MySQL, PostgreSQL, SQL Server или Oracle, SQL предоставляет мощные инструменты для эффективной работы с данными. Среди них важнейшую роль в упрощении сложных операций играют Common Table Expressions (CTE) и подзапросы.


Однако многие разработчики — особенно начинающие — задаются вопросом, чем именно отличаются CTE от подзапросов, когда выбирать одно вместо другого и как каждый влияет на читаемость, производительность и сопровождение.


В SQL подзапросы вместе с CTE позволяет разбивать сложную логику на более компактные и управляемые части. Часто достигая одинаковых результатов, они различаются структурой, повторным использованием и пригодностью для разных задач. Выбор подходящего инструмента (CTE или подзапросов) зависит от сложности запроса, необходимости повторного использования и простоты читаемости кода.


Это руководство подробно разбирает разницу между CTE и подзапросами в SQL, с примерами, вариантами применения и советами по оптимизации, которые сделают вас более эффективным SQL‑разработчиком.


Continue reading "Разница между CTE и подзапросами в SQL: полноценное руководство для разработчиков"

Улучшение поиска текста в базе данных

Пересказ статьи Hafidz Mahrus. Enhancing Database Text Search


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

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

Continue reading "Улучшение поиска текста в базе данных"

Оптимизация MySQL: удаление данных

Пересказ статьи Lukas Vileikis. Optimizing MySQL: Deleting Data


Удаление данных - основы


Спросите любого администратора баз данных, как удалить данные, и вы услышите об одном или двух следующих методов:

  1. Выполните запрос DELETE - запросы DELETE довольно самоочевидны, и они удаляют строки в таблицах базы данных.

  2. Выполните запрос TRUNCATE - TRUNCATE - это брат DELETE с тем главным отличием, что DELETE удаляет подмножество строк, а TRUNCATE удаляет все строки таблицы. TRUNCATE имеет еще одно отличие - он значительно быстрей, чем DELETE при удалении всех строк таблицы, поскольку он имеет меньше накладных расходов. Но давайте начнем с начала.


Для начала рассмотрим обычный запрос DELETE, который в MySQL выглядит следующим образом:

DELETE FROM имя_таблицы WHERE [логическое_выражение]

По частям:
Continue reading "Оптимизация MySQL: удаление данных"

MySQL INTO OUTFILE против INTO DUMPFILE

Пересказ статьи Chad Callihan. MySQL INTO OUTFILE vs. INTO DUMPFILE


Я еще не писал о MySQL, так что настало время несколько разнообразить блог.

Есть пара разных способов экспорта данных с помощью запроса SELECT в MySQL: INTO OUTFILE и INTO DUMPFILE. Давайте используем образец базы данных Sakila в MySQL и проделаем несколько примеров, чтобы сравнить эти два варианта.
Continue reading "MySQL INTO OUTFILE против INTO DUMPFILE"

Миграция базы данных MySQL на PostgreSQL с помощью pgLoader

Пересказ статьи Alexei. Migrate a MySQL database to PostgreSQL using pgLoader


У меня возникла интересная задача, и я думаю, что будет полезно поделиться ей. Возможно, это кому-то поможет.

Описание задачи


Я получил дамп базы данных MySQL, но сейчас я работаю с PostgreSQL. Я начал думать о том, как перенести данные из MySQL в PostgreSQL и обнаружил инструмент, который называется PgLoader.

Continue reading "Миграция базы данных MySQL на PostgreSQL с помощью pgLoader"

Как меняется порядок выполнения SQL в зависимости от СУБД

Пересказ статьи Tobi Sam. How SQL Execution Orders Varies Across Databases


Почему нельзя использовать GROUP BY <порядковые позиции> в SQL Server, но можно в других.


Continue reading "Как меняется порядок выполнения SQL в зависимости от СУБД"

Генерация тестовых данных с помощью встроенных возможностей базы данных

Пересказ статьи Denis Magda. Sample Data Generation With Built-In Database Capabilities


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

В этой статье вы узнаете, как использовать специальные функции базы данных, иерархические запросы и рекурсивные общие табличные выражения (CTE) для генерации тестового набора данных в PostgreSQL, MySQL, Oracle и SQL Server.
Continue reading "Генерация тестовых данных с помощью встроенных возможностей базы данных"

REGEX в SQL

Пересказ статьи Sai Krishna. REGEX IN SQL


В своих запросах SQL вы, вероятно, использовали предложение WHERE для фильтрации конкретного текста, выполняя поиск на точное совпадение. Например, вы могли бы использовать запрос типа “SELECT * FROM EMP WHERE name = 'Alex'”. Этот подход возвращает записи, которые точно соответствуют имени Alex в том же регистре. Однако имеется более универсальный способ обработки сложных текстовых шаблонов, использующих регулярные выражения (regex).
Continue reading "REGEX в SQL"