Skip to content

Параметры привязки ускоряют выполнение SQL-запросов

Пересказ статьи Lorenzo Uriel. Bind Parameters Make Your SQL Queries Faster




Конечно, вы уже использовали параметры привязки, но слышали ли вы такой совет для оптимизации?

Что-то типа: "Использование параметров привязки (параметризованных запросов) вместо конкатенации строки SQL улучшит производительность SQL"?

Почему это так вы поймете из этой статьи.

Continue reading "Параметры привязки ускоряют выполнение SQL-запросов"

SELECT и RETURN в хранимых процедурах — сравнение Sql Server и Postgres. Часть 1

Пересказ статьи Assaf Fraenkel. SELECT and RETURN in Stored Procedures — Sql Server vs Postgres Part 1


Вы испытываете сложности при переходе от SQL Server к PostgreSQL? В этой серии статей раскрывается важное различие в механизмах двух баз данных: как операторы SELECT и RETURN ведут себя в хранимых процедурах. Давайте разберемся в этом ключевом отличии и сделаем ваш переход более гладким.

Даже при наличии некоторых продуктов, которые могут помочь вам в переходе ((Google DMS, AWS DMS, Ispirer и других), а также помощи ИИ (посмотрите для примера ссылки на Google и Ispirer выше) весьма важно глубокое понимание ключевых различий между этими движками.
Continue reading "SELECT и RETURN в хранимых процедурах — сравнение Sql Server и Postgres. Часть 1"

Заполнение пробелов

Автор: Joe Celko

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


В октябре 2000 года Даррен Тафт опубликовал в группе новостей по SQL Server задачу, которая выглядит лёгкой. Приведу его слова: «У меня есть система заказов, которая выделяет номера в пределах заранее определённых диапазонов. Сейчас я делаю это так: ...» На этом месте он привёл хранимую процедуру на диалекте T-SQL. В ней был цикл, который увеличивал значение request_id до тех пор, пока не находил пропуск в нумерации или пока попытка не проваливалась. Даррен продолжил: «Это годится для первых нескольких номеров, но когда диапазоны достигают 10 000 между минимумом и максимумом, всё начинает заметно тормозить. Может ли кто-нибудь придумать лучший способ?

Continue reading "Заполнение пробелов"

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

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



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

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

Разница между 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: полноценное руководство для разработчиков"

От строк к страницам: скрытый хаос в методах выборки внутри SQL Server

Пересказ статьи Chandan Shukla. From Rows to Pages: The Hidden Chaos Behind SQL Server’s Sampling Methods


Введение


Выборка данных является обычным требованием, применимым ко многим реальным рабочим нагрузкам SQL Server, пытаетесь ли вы протестировать подмножество данных, выполняете просмотр записей перед экспортом, или строите небольшую копию таблицы для разработки, выборка становится необходимым инструментом. SQL Server предлагает оператор TABLESAMPLE, который на первый взгляд выглядит простым и многообещающим. Написав запрос типа select top 100 from Orders tablesample 10 percent, вы естественно ожидаете, что SQL Server вернет 10 процентов случайных строк. К сожалению, это не так работает.

Предложение TABLESAMPLE работает не с отдельными строками, а с физическими страницами данных. Это означает, что SQL Server пытается вернуть строки из приблизительно 10 процентов от общего числа страниц, а не строк. Если ваши данные равномерно распределены и каждая страница заполнена, это может дать вам результаты, близкие к 10 процентам строк. Но в реальности, благодаря фрагментации, обновлениям и удалениям, большинство страниц содержат различное число строк. Именно тут TABLESAMPLE становится весьма непредсказуемым. Давайте смоделируем эту ситуацию на простом примере для демонстрации поведения на практике.
Continue reading "От строк к страницам: скрытый хаос в методах выборки внутри SQL Server"

Новые функции SQL Regex в SQL Server 2025 и SSMS

Пересказ статьи Scott Murray. New SQL Regex Functions in SQL Server 2025 and SSMS


Если вы похожи на меня, то Regex - это одна из тех древних технологий/инструментов, которые вы никогда в достаточной мере не изучали. Вас может удивить, что Regex (регулярное выражение) на самом деле появились в 1950-х годах в период разработки многих современных компьютеров (Регулярное выражение — Википедия). Конечно, как и многие основные инструменты, они нарастили за последние 70 лет функциональность и области использования.

Использование регулярных выражений в SQL Server было ограничено выходом за пределы SQL Server для выполнения их функций через внешнюю службу, такую как использование процедур CLR. К счастью в 2024 Microsoft наконец начал добавление прямой поддержки, сначала в базах данных Azure SQL, а сейчас такая функциональность доступна в SQL Server 2025. В итоге в SQL Server стали доступными несколько Regex-функций, которые и будут тут рассмотрены. Основой реализации в SQL Server стала библиотека RE2 (RE2 Regular Expression Syntax).

Continue reading "Новые функции SQL Regex в SQL Server 2025 и SSMS"

Как использовать новую функцию PRODUCT() в SQL Server 2025

Пересказ статьи Edward Pollack. How to Use the New PRODUCT() Function in SQL Server 2025


С каждой новой версией SQL Server всегда появляются новые возможности, которые радуют нас тем, что наконец-то мы получили доступ к полезной функции, которая уже повсюду имеется.

Введенная в SQL Server 2025 CTP 1.3 функция PRODUCT() действует подобно SUM(), но не суммирует значения, а перемножает их. Это агрегатная функции в SQL Server и, следовательно, она работает с набором данных, а не с отдельными значениями.

Вычисление произведения без PRODUCT()


До появления этой функции написание на T-SQL перемножение ряда значений в множественной парадигме было возможно, хотя и не совсем красивым. Рассмотрим сценарий, в котором необходимо перемножить множество значений по времени для расчета постоянно растущей мультипликативной метрики, такой как проценты или инфляция.
Continue reading "Как использовать новую функцию PRODUCT() в SQL Server 2025"

Упражнение по запросу: исправить такой вычисляемый столбец

Пересказ статьи Brent Ozar. Query Exercise: Fix This Computed Column


Возьмите базу данных Stack Overflow любого размера и посмотрите на столбец WebsiteUrl в таблице Users:



Иногда там попадается NULL, иногда пустая строка, иногда содержится неверный URL.

Скажем, наконец, кто-то решил попросить ChatGPT построить функцию для проверки валидности URL веб-сайтов, а затем использовал этот код для добавления нового столбца IsValidUrl в таблицу Users (и да, реальный клиент вдохновил меня на это пример): Continue reading "Упражнение по запросу: исправить такой вычисляемый столбец"

Снизить блокирование в SQL Server с помощью READ_COMMITTED_SNAPSHOT

Пересказ статьи Jared Westover. Reduce SQL Server Blocking with READ_COMMITTED_SNAPSHOT


Без блокировок дисковые таблицы ожидает хаос. Но вы испытываете неудобство от чрезмерных блокировок? Пользователи могут жаловаться на медленную работу приложения или отчеты готовятся целую вечность. Если так, то наличие специальной опции базы данных может ускорить ваши запросы. Но, как обычно, у всякой хорошей вещи есть обратная сторона.

В этой статье исследуется, как включение READ_COMMITTED_SNAPSHOT для вашей базы данных может облегчить чрезмерное блокирование. Сначала мы рассмотрим пример блокировок в нагруженной среде с уровнем изоляции по умолчанию Read Committed. Затем посмотрим на то, как включение уровня изоляции на основе версий строки снижает число блокированных чтений. К концу статьи вы будете готовы к тестированию этой возможности в вашей текущей среде.
Continue reading "Снизить блокирование в SQL Server с помощью READ_COMMITTED_SNAPSHOT"

DISTINCT и UNION: что произойдет, если использовать их вместе?

Пересказ статьи Louis Davidson. DISTINCT and UNION: What happens when you use them together


В одном из ответов к ветке об использовании SELECT * Aaron Cutshall заметил, что "еще одним из реальных убийц производительности является SELECT DISTINCT, особенно в сочетании с UNION. У меня есть целый список часто используемых скрытых «убийц» производительности!"

Я начал размышлять... Что происходит, когда вы используете их вместе? А когда вы используете UNION на множестве неуникальных строк, что происходит? Итак, я начал писать.

Continue reading "DISTINCT и UNION: что произойдет, если использовать их вместе?"

Удаление ведущих нулей в SQL Server

Пересказ статьи Steve Stedman. Removing Leading Zeros in SQL Server


При работе с данными в SQL server иногда возникает потребность удалить ведущие нули в строке. Эта задача является довольно общей, в частности, при работе с числовыми данными, которые хранятся в виде строк, как например ZIP-коды, коды товаров или другие форматированные числа. В этой статье мы рассмотрим несколько методов для удаления ведущих нулей в SQL Server.

Метод 1: использование функций CAST и CONVERT


Одним простым способом удаления ведущих нулей является преобразование строки в число, а затем обратно в строку. Этот подход хорошо работает, если вы знаете, что строка содержит только числовые символы.
Continue reading "Удаление ведущих нулей в SQL Server"

Добавьте индексы, чтобы улучшить производительность SQL DELETE

Пересказ статьи Jared Westover. Add Indexes to Improve SQL DELETE Performance


Вы добавляете индексы, чтобы ускорить запросы, но как насчет удаления данных? Говорили вам, что индексы замедляют удаление? Это объясняется тем, что чем больше копий данных разбросаны по индексам, тем больше данных должен удалить SQL Server при чистке. Но подтверждается ли это утверждение результатами тестов?

В этой статье мы исследуем важность индексов в улучшении операторов DELETE. Кроме того, многие разработчики полагают, что добавление внешнего ключа создает индекс, а это значит, что они обычно отсутствуют. Как можно определить, какие внешние ключи пропускают индексы? Не беспокойтесь, полезная DMV поможет обнаружить их. Начиная с сегодняшнего дня вы приобретете навыки ускорять ваши операторы DELETE.
Continue reading "Добавьте индексы, чтобы улучшить производительность SQL DELETE"

Может ли ИИ читать планы выполнения?

Пересказ статьи Grant Fritchey. Can AI Read Execution Plans?


Да, да, вторая статья об ИИ подряд. Я обещаю, что это не станет привычкой. Но я видел, что кто-то еще упомянул, что вы можете подать XML, и ИИ прочитает план выполнения. Я должен был протестировать это, а затем поделиться результатами с вами.
Continue reading "Может ли ИИ читать планы выполнения?"

Неделя SQL: поразрядное маскирование и побитовые операции

Пересказ статьи Lorenzo Uriel. The SQL Week: Bitmasking & Bitwise


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

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

Это делается с помощью побитовых операторов, таких как AND (&), OR (|), XOR (^), NOT (~) и других. Битовые маски используются для определения того, какие биты числа будут модифицироваться, тестироваться или включаться.
Continue reading "Неделя SQL: поразрядное маскирование и побитовые операции"