В настоящее время я занимаюсь оптимизацией потребления/памяти нашего приложения. Одна из задач, которые необходимо выполнить, - заменить все blob в таблице, которые соответствуют пустым массивам с нулевыми значениями; это должно уменьшить размер db, потребление памяти и ускорить загрузку. Вот определение таблицы:Ухудшение производительности SQL Server
CREATE TABLE [dbo].[SampleTable](
[id] [bigint] NOT NULL,
[creationTime] [datetime] NULL,
[binaryData] [image] NULL,
[isEvent] [bit] NULL,
[lastSavedTime] [datetime] NULL,
CONSTRAINT [PK_SampleTable] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Я обновил таблицу и заменить значение изображения поля (BinaryData) с нулевыми значениями в соответствующих случаях (данные, соответствующее пустые массивы в приложении). Теперь я наблюдаю ухудшение производительности при запуске тривиального SELECT * FROM SampleTable.
Первоначально эти поля, которые были обновлены, имели длину = 512 байт, но не уверены, имеет ли это значение.
Любые идеи, почему выборка блоков, содержащих значения NULL, занимает больше времени, чем выбор реальных двоичных данных, даже если данные одинаковы для разных строк?
Вы уверены, что вы сравниваете яблоки с яблоками? Какие две команды SQL вы использовали? Вы запускали их из одного и того же места/окружения? SSMS? –
Извините за неясность: в обоих случаях я запускаю тот же запрос «Выберите * из таблицы». Я проверил производительность двумя разными способами: 1. Из студии управления 2. Запустите приложение, подключенное к db, и запустите запрос и проверите результаты в профилировщике SQL. Результаты были одинаковыми в обоих случаях. – Daniel
Что такое тип '[dbo]. [Image]'? Это настраиваемый тип данных CLR? –