Skip to content

Эффективные стратегии для хранения и парсинга JSON в SQL Server

Пересказ статьи Edward Pollack. Effective Strategies for Storing and Parsing JSON in SQL Server


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

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

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

Значение NULL и пустая строка в Oracle, SQL Server и PostgreSQL

Автор: Akhil Reddy Banappagari, Null and Empty String in Oracle vs SQL Server vs PostgreSQL



При планировании миграции баз данных в PostgreSQL именно мелочи часто становятся причиной самых серьёзных сбоев в рабочей среде. Одна из самых распространённых ловушек для разработчиков — это различная обработка значений NULL и пустых строк ('') в разных СУБД.



Хотя они могут казаться схожими концепциями, обозначающими отсутствие значения, то, как механизм базы данных их интерпретирует, может изменить результаты ваших запросов, нарушить уникальные ограничения или привести к сбоям загрузки данных. В этом руководстве мы сравним поведение Oracle, SQL Server и PostgreSQL, чтобы помочь вам избежать распространённых ошибок миграции.



Continue reading "Значение NULL и пустая строка в Oracle, SQL Server и PostgreSQL"

Проблема неявных транзакций

Пересказ статьи Steve Jones. The Challenge of Implicit Transactions


Сценарий


Вы выполняете такой код:



Все выглядит хорошо. Я выполнил вставку и вижу данные в таблице. Я тороплюсь, поэтому щелкаю "close" (закрыть) на вкладке и вижу это:



Я настолько привык к этим раздражающим меня сообщениям в SSMS, что я нажимаю «Нет», чтобы избавиться от них и закрыть окно.
Continue reading "Проблема неявных транзакций"

Подводные камни Truncate Table

Пересказ статьи Peter Skoglund. Truncate Table Pitfalls


Усечение таблицы может быть замечательно быстрым - и чрезвычайно опасным при неосмотрительном использовании. Если вы хотите иметь скорость и не разочароваться, тут дается практическое, готовое для интервью руководство по реальным подводным камням TRUNCATE TABLE в SQL Server и то, как избежать их.

Справка


  • TRUNCATE TABLE является операцией DDL, которая освобождает страницы (эффективно журнализированные) и сбрасывает IDENTITY к начальному значению. При этом триггеры DELETE не срабатывают. Возможен откат при выполнении внутри транзакции.

  • Завершается неудачно, если на таблицу ссылается внешний ключ (даже если дочерняя таблица пуста), используется в индексированных представлениях, является системно-версионной (временной), опубликованной для репликации или включена для CDC, или на нее ссылается ограничение EDGE графа. Существует специальная возможность для самоссылающихся внешних ключей.

  • Начиная с SQL Server 2016, вы можете усекать конкретные секции: TRUNCATE TABLE dbo.Fact WITH (PARTITIONS (4 TO 6)); (индексы должны быть выровнены).

Continue reading "Подводные камни Truncate Table"

Массовая вставка T‑SQL или OPENROWSET: импорт CSV, проблемы доступа к файлам и скрипт PowerShell

Пересказ статьи Rick Dobson. T‑SQL BULK INSERT vs OPENROWSET: CSV Imports, File Access Gotchas, and A PowerShell Script


Большинство руководств по массовой вставке SQL и SQL Server openrowset игнорируют проблемы доступа к файлам, которые могут прервать импорт. И оператор bulk insert, и функция openrowset выполняются под аккаунтом службы SQL Server при чтении файла источника. Аккаунт службы SQL Server должен иметь разрешение на чтение файла или папки, где файл находится. Также удобно иметь разрешения на чтение и выполнение, а также вывод содержимого папки. Кроме того, нестандартные места размещения файла источника (например, C:\Users\Public\Downloads) могут не предоставлять доступ на чтение по умолчанию аккаунту службы SQL Server - всегда проверяйте это перед использованием.

Импорт данных из файла источника в таблицу SQL Server является обычной операцией, но она озадачивает многих новичков и порой вызывает трудности даже у опытных разработчиков в сложных сценариях. В этой статье изучается импорт файлов CSV в таблицы SQL Server либо с помощью оператора BULK INSERT, либо функции openrowset в операторе SELECT. Continue reading "Массовая вставка T‑SQL или OPENROWSET: импорт CSV, проблемы доступа к файлам и скрипт PowerShell"

Что использовать: VARCHAR или NVARCHAR?

Пересказ статьи Brent Ozar. Which Should You Use VARCHAR or NVARCHAR?


Вы строите новую таблицу или добавляете столбец, и вы хотите знать, какой тип данных использовать: VARCHAR или NVARCHAR?

Если вам необходимо хранить данные Unicode, выбор сделан за вас: NVARCHAR говорит, что это буду я.

Но если вы не уверены, то можете подумать: "Я должен использовать VARCHAR, поскольку он занимает вдвое меньше места". Я это знаю, потому что чувствовал то же самое, но множество комментаторов указали мне на это, когда я опубликовал ответ в «Office Hours» о том, что по умолчанию я использую VARCHAR. Один за другим разработчики говорили мне, что я неправ и что в 2025 пришло время вместо этого по умолчанию использовать NVARCHAR. Давайте проведем эксперимент!

Чтобы выяснить это, давайте возьмем большую базу данных Stack Overflow и создадим две копии таблицы Users. Я использую здесь таблицу Users, чтобы сделать демонстрацию краткой и понятной, поскольку у меня нет возможности целый день загружать гигабайты данных (и перезагружаться, как вы сейчас увидите). Мы просто собираемся сфокусироваться на строковых столбцах, поэтому я создал одну с типами VARCHAR, а другую - с NVARCHAR. Затем для простоты мы загрузим только те данные, которые являются чисто VARCHAR (потому что некоторые чудаки могли добавить какие-нибудь необычные данные Unicode в столбец AboutMe).
Continue reading "Что использовать: VARCHAR или NVARCHAR?"

Сравнение перестройки и реорганизации индексов SQL

Пересказ статьи Sergey Gigoyan. SQL Index Rebuild vs Reorganize Comparison


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

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

Continue reading "Сравнение перестройки и реорганизации индексов SQL"

Параметры привязки ускоряют выполнение 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 "Учёт интервалов времени"