En el pasado he notado un rendimiento terrible al consultar una columna varbinary (max). Comprensible, pero también parece ocurrir cuando se comprueba si es nulo o no, y esperaba que el motor tomara algunos atajos.Estrategias para verificar ISNULL en campos varbinary?
select top 100 * from Files where Content is null
sospecharía que es lento porque es
- Necesidad de tirar de todo el binario, y
- No se ha indexado (varbinary no puede ser parte de un índice normal)
This question parece estar en desacuerdo con mi premisa de lentitud aquí, pero parece que tengo problemas de rendimiento con campos binarios una y otra vez.
Una posible solución pensé es hacer una columna calculada que se indexados:
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
¿Eso es una estrategia válida? ¿Qué otras formas hay para consultar de manera eficiente cuando se trata de campos binarios?