Ускоренный SQL Server: вставить ноль или пропустить его? - PullRequest
0 голосов
/ 26 апреля 2018

Простой вопрос SQL Server .. что быстрее:

  1. Укажите, где пропустить столбец (как NULL)
  2. Вставить туда, где вы явно вставили NULL?

.... а почему?

CREATE TABLE dbo.myTable
(
     Id int CONSTRAINT PK_myTable_Id PRIMARY KEY,
     Name varchar(200) NULL
)
GO

INSERT INTO dbo.myTable(Id) VALUES (1);
INSERT INTO dbo.myTable(Id, Name) VALUES (2, NULL);
GO

Пожалуйста, предоставьте ссылку или эталон (чтобы ваш ответ был не просто мнением).

Спасибо.

PS : Я мог бы запустить 2 массивных цикла и сравнить общее время, но это все равно не скажет мне, почему ..

1 Ответ

0 голосов
/ 26 апреля 2018

Это абсолютно не влияет на производительность. Могут быть нано-секундные различия в компиляции оператора, но фактически выполняемая работа такая же:

  • Механизм базы данных должен регистрировать вставку.
  • Требуется найти страницу данных для выполнения вставки.
  • Необходимо скопировать данные для всей записи на страницу данных.
  • Для записи должен быть установлен бит NULL.

Поиск значения по умолчанию NULL является частью того, что движок должен сделать, чтобы определить формат записи. Могут быть очень небольшие различия в производительности из-за нюансов, таких как:

  • Поиск значения по умолчанию NULL. И это может отличаться в зависимости от того, определено ли ограничение по умолчанию.
  • Анализ более длинной строки запроса.

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

...