Skip to content

Правильный способ проверки на NULL в запросах SQL Server

Пересказ статьи Erik Darling. The Right Way To Check For NULLs In SQL Server Queries


Это все еще одна из наиболее общих проблем, которую я вижу в запросах.
Люди боятся NULL. Люди боятся сливаться на автострадах в Лос-Анджелесе.
В результате имеем бесконечный поток запросов с плохой производительностью, и некоторые неожиданные ошибки, обнаруживаемые по пути.
Продолжить чтение "Правильный способ проверки на NULL в запросах SQL Server"

Советы по производительности оператора SQL TOP

Пересказ статьи Esat Erkec. SQL TOP statement performance tips


В этой статье мы будем использовать учебную базу данных Adventureworks2019. Мы также будем использовать скрипт Create Enlarged AdventureWorks Tables для получения увеличенной версии этой базы данных.

Что такое оператор SQL TOP


Оператор TOP используется для ограничения числа строк, которые извлекаются или обновляются в одной или нескольких таблицах. Это ограничение на число строк можно задать как фиксированным значением, так и процентом строк в таблице. Например, следующий запрос вернет первые 10 случайных строк из таблицы Production.
Продолжить чтение "Советы по производительности оператора SQL TOP"

Проблемы производительности запросов с EXISTS

Пересказ статьи Erik Darling. Performance Issues With EXISTS Queries


Мне на самом деле нравится EXISTS и NOT EXISTS. Правда. Они решают множество проблем.
Эта публикация не является их общей критикой, и я ни в коем случае не призываю вас отказаться от них. Я бы посоветовал вам даже использовать их почаще.
Но есть некоторые моменты, о которых вам следует знать, когда вы их используете, будь то в логике потока управления или в запросах.
Если вы будете помнить о них, у вас все будет хорошо.
Продолжить чтение "Проблемы производительности запросов с EXISTS"

Сравнение обычных представлений и индексированных

Пересказ статьи Chad Callihan. Views vs. Indexed Views


Давайте рассмотрим преимущества и недостатки представлений SQL.
Запрос к нескольким таблицам можно облегчить с помощью представлений. Запрос к единственному представлению (SELECT * FROM MyView) короче по сравнению с запросом, в котором соединяется несколько таблиц для получения результата.
Представления также можно использовать для усиления безопасности, разрешая пользователям доступ только к определенным столбцам в таблицах, определенных в представлении.

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

Вы столкнулись с тем, что узким местом в производительности запросов оказалось представление? Рассмотрите возможность создания уникального кластеризованного индекса (а затем любых дополнительных некластеризованных индексов) на представлении для улучшения производительности. Продолжить чтение "Сравнение обычных представлений и индексированных"

Error [IM002] [Microsoft][ODBC Driver Manager] "Data source name not found and no default driver specified" и кому доверять?

Пересказ статьи Rayis Imayev. Error [IM002] [Microsoft][ODBC Driver Manager] "Data source name not found and no default driver specified" and who do you trust?


Это очень короткий пост, просто чтобы напомнить себе, но, если вы когда-либо пытались подключиться к базе данных PostgreSQL с помощью интерфейса ODBC (знаю, что это уже звучит, как очень интересный вызов), то могли столкнуться с таким сообщением об ошибке: “ERROR [IM002] [Microsoft][ODBC Driver Manager] Источник данных не найден и не указан драйвер по умолчанию.”
Продолжить чтение "Error [IM002] [Microsoft][ODBC Driver Manager] "Data source name not found and no default driver specified" и кому доверять?"

Как секционировать таблицы MySQL

Пересказ статьи Everett Berry. How to Partition MySQL Tables


Горизонтальное и вертикальное секционирование


Имеется два типа секционирования базы данных: вертикальное и горизонтальное

Вертикальное секционирование


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

Горизонтальное секционирование


Секционирование логически разбивает строки по нескольким таблицам. Число столбцов остается неизменным при разбиении, в то время как число строк может меняться. MySQL в настоящее время поддерживает горизонтальное секционирование. Здесь мы рассмотрим три различных вида горизонтального секционирования в MySQL. Продолжить чтение "Как секционировать таблицы MySQL"
Категории: MySQL

Функции работы со строками в SQL Server, Oracle и PostgreSQL

Пересказ статьи Andrea Gnemmi. SQL String functions in SQL Server, Oracle and PostgreSQL


Строковые функции широко используются для манипуляции, извлечения, форматирования и поиска текста для типов данных char, nchar (unicode), varchar, nvarchar (unicode) и т.д. К сожалению, имеются некоторые отличия в строковых функциях SQL Server, Oracle и PostgreSQL, которые обсуждаются в этой статье. Продолжить чтение "Функции работы со строками в SQL Server, Oracle и PostgreSQL"

Как включить и отключить полнотекстовый поиск для баз данных SQL Server

Пересказ статьи Manvendra Singh. How to Enable and Disable Full Text Search for SQL Server Databases


Как вы можете знать, полнотекстовый поиск включен для всех баз данных SQL Server, если компоненты полнотекстового поиска установлены для экземпляра SQL Server. Если вашим требованием является отключить функциональность полнотекстового поиска для базы данных, как сделать, чтобы при этом полнотекстовый поиск продолжал работать для других баз данных на том же экземпляре SQL Server. В этой статье мы рассмотрим как включать и выключать функцию полнотекстового поиска для отдельных баз данных SQL Server.
Продолжить чтение "Как включить и отключить полнотекстовый поиск для баз данных SQL Server"
Категории: T-SQL

Запись, которая никогда не существовала (как зафиксированная строка)

Пересказ статьи Alessandro Mortola. The Record That Never Existed (as a committed row)



Введение


Согласно официальной документации уровень изоляции READ COMMITTED "определяет, что операторы не могут читать данные, которые были модифицированы, но не зафиксированы другими транзакциями". Поэтому можно подумать, что запись, возвращаемая при этом уровне изоляции, существовала в зафиксированном состоянии в момент чтения.

В этой статье я собираюсь доказать, что возможны пограничные ситуации, когда прочитанные данные вообще никогда не существовали, по крайней мере, в зафиксированном состоянии.
Продолжить чтение "Запись, которая никогда не существовала (как зафиксированная строка)"
Категории: T-SQL

Встраивание UDF и агрегация строк

Пересказ статьи Erik Darling. UDF Inlining And String Aggregations


Четыре врага


Фактически данная статья состоит их четырех постов. Возможно, пяти. Вот основные темы:

  • STRING_AGG не может быть встроен, если это UDF.

  • Получить значения DISTINCT в STRING_AGG сложнее, чем это должно быть.

  • Документация по встраиванию UDF вводит в заблуждение.

  • XML PATH можно встроить в UDF.


Начнем сверху, поскольку первые всегда наверху.
Продолжить чтение "Встраивание UDF и агрегация строк"