23 Stimmen

Strategien für die Überprüfung von ISNULL auf varbinary Felder?

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

  1. Ich muss das gesamte Binärsystem herausziehen, und
  2. 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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X