In der Vergangenheit habe ich eine schreckliche Leistung bei der Abfrage einer varbinary (max) Spalte festgestellt. Verständlich, aber es scheint auch zu passieren, wenn überprüft wird, ob es null ist oder nicht, und ich hatte gehofft, dass der Motor stattdessen einige Abkürzungen nehmen würde.Strategien zum Überprüfen von ISNULL auf varbinary Felder?
select top 100 * from Files where Content is null
Ich würde vermuten, dass es langsam ist, weil es
- Needing die ganze binäre zu ziehen, und
- Es ist nicht indiziert (varbinary kann nicht Teil eines normalen Index sein)
This question scheint mit meiner Prämisse der Langsamkeit hier zu widersprechen, aber ich habe immer wieder Leistungsprobleme mit binären Feldern zu haben.
Eine mögliche Lösung, die ich dachte, ist eine berechnete Spalte zu machen, dass ist indiziert:
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
Ist das eine gültige Strategie? Welche anderen Möglichkeiten gibt es, effizient abzufragen, wenn Binärfelder beteiligt sind?