Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Welchen Vorteil hat das varbinary-Feld in einer separaten 1-1-Tabelle?

Es gibt keinen Leistungs- oder Betriebsvorteil. Seit SQL 2005 gibt es die LOB-Typen bereits von der Engine in einer separaten Zuordnungseinheit, einem separaten B-Baum, für Sie gespeichert. Wenn Sie den Tabellen- und Indexorganisation von SQL Server sehen Sie, dass jede Partition bis zu 3 Zuordnungseinheiten hat:Daten, LOB und Zeilenüberlauf:


(Quelle:s-msft.com )

Ein LOB-Feld (varchar(max), nvarchar(max), varbinary(max), XML, CLR UDTs sowie die veralteten Typen text, ntext und image) wird im Datensatz selbst, im Clustered Index, nur noch a sehr kleiner Fußabdruck:ein Zeiger auf die LOB-Zuweisungseinheit, siehe Anatomy of a Record .

Indem Sie ein LOB explizit in einer separaten Tabelle speichern, gewinnen Sie absolut nichts . Sie fügen nur unnötige Komplexität hinzu, da frühere atomare Updates sich jetzt in zwei separate Tabellen verteilen müssen, was die Anwendung und die Transaktionsstruktur der Anwendung verkompliziert.

Wenn der LOB-Inhalt eine ganze Datei ist, sollten Sie vielleicht ein Upgrade auf SQL 2008 in Betracht ziehen und FILESTREAM .