В прошлом я отмечал ужасную производительность при обращении к столбцу varbinary (max).Понятно, но это также, кажется, происходит при проверке, является ли он нулевым или нет, и я надеялся, что двигатель вместо этого возьмет несколько ярлыков.
select top 100 * from Files where Content is null
Я подозреваю, что это медленно, потому что
- Нужно извлечь весь двоичный файл, и
- Он не проиндексирован (varbinary не может бытьчасть нормального индекса)
Этот вопрос , похоже, не согласуется с моей предпосылкой медлительности, но у меня, похоже, снова и снова возникают проблемы с производительностью двоичных полей.
Одним из возможных решений, о котором я подумал, является создание вычисляемого столбца с индексом :
alter table Files
add ContentLength as ISNULL(DATALENGTH(Content),0) persisted
CREATE NONCLUSTERED INDEX [IX_Files_ContentLength] ON [dbo].[Files]
(
[ContentLength] ASC
)
select top 100 * from Files where ContentLength = 0
Это правильная стратегия?Какие есть другие способы эффективного запроса, когда задействованы двоичные поля?