In passato ho notato prestazioni terribili durante l'interrogazione di una colonna varbinary (max). Comprensibile, ma sembra anche che accada quando si verifica se è nullo o no, e speravo che il motore avrebbe preso alcune scorciatoie.Strategie per il controllo di ISNULL sui campi varbinary?
select top 100 * from Files where Content is null
io sospetto che è lento perché è
- Dovendo tirare l'intero binario, e
- non è indicizzato (varbinary non può essere parte di un indice normale)
This question sembra essere in disaccordo con la mia premessa di lentezza qui, ma mi sembra di avere problemi di prestazioni con i campi binari più e più volte.
Una soluzione possibile ho pensato è di fare una colonna calcolata che è indicizzato:
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
È che una strategia valida? Quali altri modi ci sono per interrogare in modo efficiente quando sono coinvolti i campi binari?