Пересказ статьи Rich Benner. SQL Server Antipatterns: Common Mistakes with SQL Code
В современном технически насыщенном мире от разработчиков требуется широкий диапазон навыков и языков программирования. Язык SQL обычно является одним из них. Это гарантирует, что в команде возможна взаимная поддержка на ежедневной основе, но это также может приводить к ошибкам в коде SQL.
Одной из потенциальных проблем здесь является нехватка времени для того, чтобы действительно глубоко вникать в каждый язык программирования, имеющийся в вашем арсенале. Что касается SQL Server, то язык, который там используется, весьма отличается от, скажем, C#. Эти языки основаны на обработке в итерационном процессе каждой строки отдельно в наборе данных. Это достаточно хорошо работает в подобных языках, но совершенно ужасно в SQL Server. Будучи языком, основанном на теории множеств, SQL Server предпочитает иметь дело сразу со всем множеством данных.
Continue reading "Антипаттерны SQL Server: характерные ошибки кода SQL"
Пересказ статьи Andy Brownsword. A Bit About Trivial Plans
Тривиальный план создается, когда у SQL Server нет никакого выбора по реализации. Вот пример из базы данных StackOverflow с удаленными индексами:
SELECT *
FROM dbo.Users
WHERE Id = 1234;
Здесь действительно нет никакого выбора помимо поиска в кластеризованном индексе. Это единственный индекс и это настолько же эффективно, насколько это возможно, учитывая, что мы фильтруем по ключу кластеризации для конкретного значения:
Continue reading "Немного о тривиальных планах"
Пересказ статьи Andy Brownsword. Optimising DISTINCT Clauses using EXISTS
Предложение DISTINCT может помочь нам быстро убрать дубликаты из результатов запроса. Иногда полезно остановиться и спросить почему. Почему нам необходимо использовать это предложение, почему мы получаем дубликаты из наших данных?
Обычно я вижу это из-за применения JOIN, когда на самом деле нам не нужны все эти результаты. Это может быть проверка «существует ли что-либо», например, делал ли клиент когда-либо заказ раньше. Проблема возникает, когда имеется много возвращаемых строк, например, для постоянного клиента в нашем примере.
Continue reading "Оптимизация предложений DISTINCT с помощью EXISTS"
Пересказ статьи Joydip Kanjilal. Gracefully Handle Errors using TRY CATCH Logic in SQL Server Stored Procedures
Надлежащая обработка ошибок является неотъемлемой частью любого устойчивого приложения. В SQL Server вы можете столкнуться с ошибками по разным причинам, например, из-за неверных или несогласованных данных и системных проблем. В этой статье рассматривается изящная обработка ошибок при использовании хранимых процедур в SQL Server.
Имеется несколько способов обработки ошибок в хранимых процедурах SQL Server, таких как блоки TRY/CATCH, операторы RAISERROR и операторы THROW. Здесь мы обсудим то, как обрабатывать ошибки в хранимых процедурах SQL Server.
Continue reading "Изящная обработка ошибок с помощью логики TRY CATCH в хранимых процедурах SQL Server"
Пересказ статьи Hugo Kornelis. Plansplaining part 28 – The curious case of the missing FIRST_VALUE function
В двадцать восьмой части серии
plansplaining я завершаю мини-серию из шести частей, посвященную оконным функциям. После обсуждения
основ,
ускоренной оптимизации,
завершения рамок окна на UNBOUNDED FOLLOWING,
оконных рамок, задаваемых с RANGE вместо ROWS и
LAG и LEAD мы рассмотрим аналитические функции LAST_VALUE и FIRST_VALUE и обнаружим, что функция, от которой мы ожидали присутствие в качестве внутренней агрегатной функции, вообще не существует! Мы также выясним, как SQL Server работает с этим.
Continue reading "Любопытный случай отсутствия функции FIRST_VALUE"
Пересказ статьи Aubrey Love. SQL WAITFOR Command to Delay SQL Code Execution
Одной из наиболее редко используемых команд в SQL является команда WAITFOR. Она представляет один из вариантов заочно внести задержку в выполнение программы. По причине редкого использования часто забывается, как и где она может быть применена при необходимости. Например, мы могли бы ее использовать для имитации ответа пользователя или ввода, или, возможно, для сбора данных с определенными интервалами в течение дня.
Continue reading "Команда SQL WAITFOR для задержки выполнения кода SQL"
Пересказ статьи Chad Callihan. What Does ANSI_NULLS Do
Видели ли вы когда-нибудь установку ANSI_NULLS в значение On или OFF в скрипте или хранимой процедуре? Я видел или слышал упоминание об этом несколько раз за последнее время и подумал, что будет полезно продемонстрировать на примере действие этой настройки.
Continue reading "Что делает ANSI_NULLS?"
Пересказ статьи Edward Pollack. Exporting and Importing Data into SQL Server Using Files
Имеется много доступных приложений и инструментов, которые позволяют перемещать данные в/из SQL Server. Некоторые инструменты встроены Microsoft, такие как SSIS или Azure Data Factory. Другие созданы третьими сторонами, такие как Databricks или Snowflake. Другие доступные варианты используют возможности SQL Server и полагаются на собственные возможности писать эффективный код для получения данных из точки А в точку Б.
Continue reading "Экспорт и импорт данных в SQL Server, используя файлы"
Пересказ статьи Kamruzzaman Kamrul. Auto-Increment Integer IDs vs. UUIDs in Database Tables: Which to Choose
При проектировании базы данных нужно принять одно важное решение - каким образом уникально идентифицировать каждую запись. Двумя популярными методами являются использование целочисленных автоинкрементируемых ID и универсальных уникальных идентификаторов (UUID). Тут я пытаюсь показать преимущества и недостатки каждого метода.
Continue reading "Целые автоинкрементируемые ID или UUID в таблицах базы данных: что выбрать?"
Пересказ статьи Aaron Bertrand. Counting more efficiently
Почти десятилетие назад я написал статью с названием
«Вредные привычки: трудный подсчет строк». В той статье я говорил о том, как мы можем использовать метаданные для мгновенного получения числа строк в таблице. Обычно люди делают следующее, что приводит к чтению всей таблицы или индекса:
DECLARE @c int = (SELECT COUNT(*) FROM dbo.TableName);
Чтобы в значительной степени избежать ограничений на размер данных, вместо этого мы можем использовать sys.partitions.
Continue reading "Более эффективный подсчет"
Пересказ статьи Hugo Kornelis. Plansplaining part 26 – Windows with a ranged frame
Это двадцать шестая часть
данной серии (plansplaining). И уже четвертый эпизод об оконных функциях.
Первая из этих статей была посвящена базовым оконным функциям;
вторая была посвящена быстрой оптимизации накопительных агрегатов, а в
третьей публикации объяснялось, как оптимизатор работает при отсутствии поддержки плана выполнения для UNBOUNDED FOLLOWING.
Continue reading "Планирование планов. Часть 26 - окна с диапазонной рамкой"
Пересказ статьи Erik Darling. The Art Of The SQL Server Stored Procedure: Data Types
Смесь и соответствие
Есть лишь несколько типов данных, которые нервируют меня, когда я их вижу:
Строки MAX или близкие к верхнему пределу по байтам (за исключением динамического SQL)
XML
sql_variant
Не важно, являются ли они параметрами хранимой процедуры или объявляются в локальных переменных. Когда они появляются, я ожидаю следом чего-то плохого.
Continue reading "Искусство хранимой процедуры SQL Server: типы данных"
Пересказ статьи Hadi Fadlallah. An overview of SQL Server monitoring tools
Мониторинг базы данных: быстрое напоминание
Мониторинг баз данных - это множество инструментов и методов, используемых для создания и обслуживания инфраструктуры приложения, обладающих высокой доступностью и скоростью работы. Он помогает отслеживать потребление ресурсов, таких как число операций чтения и записи, потребление ЦП и RAM, размеры хранилища и временного хранилища и т.д. Потребление ресурсов может быть получено на точное время или непрерывно измеряться в реальном времени.
Continue reading "Обзор инструментов мониторинга для SQL Server"
Пересказ статьи Aaron Bertrand. Advanced testing with WAITFOR in SQL Server client tools
WAITFOR - это очень полезная команда для предотвращения выполнения последующих операций до тех пор, пока не пройдет определенное время (WAITFOR DELAY) или пока не наступит конкретное время (WAITFOR TIME). Эти команды достаточно хорошо обсуждались (включая "за" и "против") в
предыдущей статье.
Continue reading "Расширенное тестирование с помощью WAITFOR в клиентских инструментах SQL Server."