In der Vergangenheit habe ich festgestellt, schreckliche Leistung bei der Abfrage einer varbinary (max) Spalte. Verständlich, aber es scheint auch zu passieren, wenn geprüft wird, ob sie null ist oder nicht, und ich hatte gehofft, die Maschine würde stattdessen einige Abkürzungen nehmen.
select top 100 * from Files where Content is null
Ich würde vermuten, dass es langsam ist, weil es
- Ich muss das gesamte Binärsystem herausziehen, und
- Es ist nicht indiziert (varbinary kann nicht Teil eines normalen Indexes sein)
Diese Frage scheint mit meiner Annahme der Langsamkeit hier nicht einverstanden zu sein, aber ich scheine immer wieder Leistungsprobleme mit binären Feldern zu haben.
Eine mögliche Lösung, an die ich gedacht habe, besteht darin, eine berechnete Spalte zu erstellen, die es 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 sinnvolle Strategie? Welche anderen Möglichkeiten gibt es für eine effiziente Abfrage, wenn binäre Felder beteiligt sind?