Frage

Ich brauche Binärdateien in einer varbinary (max) Spalte auf SQL Server speichern 2005 wie folgt aus:

Fileinfo

  • FileInfoId int, PK, Identität
  • FileText varchar (max) (kann null sein)
  • FileCreatedDate Datetime etc.

filecontent

  • FileInfoId int, PK, FK
  • filecontent varbinary (max)

Fileinfo hat eine 0.59 Beziehung zu filecontent. Die FileText soll verwendet werden, wenn es keine Datei hochladen, und nur der Text wird manuell für ein Element eingegeben werden. Ich bin nicht sicher, wie viele Prozent der Elemente eine Binärdatei hat.

Sollte ich die zweite Tabelle. Gäbe es mit den beiden Tabellen-Design alle Performance-Verbesserungen sein? Gibt es logische Vorteile?

Ich habe gefunden href="https://stackoverflow.com/questions/333419/separate-table-for-picture-items-with-image-field">, aber nicht wenn es sicher in meinem Fall gilt.

War es hilfreich?

Lösung

Es gibt keine Leistung noch Betriebsvorteil. Seit SQL 2005 sind die LOB-Typen bereits für Sie gespeichert durch den Motor in einer separaten Zuordnungseinheit, einem separaten B-Baum. Wenn Sie die Tabellen- und Indexorganisation von SQL Server finden Sie sehen, dass jede Partition bis zu 3 Zuordnungseinheiten: Daten, LOB und Zeilenüberlauf:

Table Organisation

Ein LOB-Feld (varchar (max), nvarchar (max), varbinary (max), XML, CLR UDT sowie der veraltete Typ Text, Ntext und Bild) wird im Datensatz hat sich in dem gruppierten Index nur eine sehr kleine Stellfläche: ein Zeiger in die LOB-Zuordnungseinheit finden Sie unter Anatomie einer Bilanz .

ein LOB explizit in einer separaten Tabelle Durch das Speichern von erhalten Sie absolut nichts . Sie fügen nur unnötige Komplexität als frühere Atom-Updates haben sich in zwei getrennte Tabellen nun verteilen, um die Anwendung zu verkomplizieren und die Anwendung Transaktionsstruktur.

Wenn der LOB Inhalt eine ganze Datei ist dann sollten Sie vielleicht zu SQL 2008 aktualisieren betrachten und mit FILESTREAM .

Andere Tipps

Es gibt keine wirklichen logischen Vorteil dieses zwei Tabellen-Design, da die Beziehung 1-1 ist, könnten Sie alle haben die Informationen in der Tabelle Fileinfo gebündelt. Allerdings gibt es ernsthafte Betriebs- und Leistungs Vorteile, insbesondere wenn Ihre Binärdaten mehr als ein paar hundert Bytes groß, im Durchschnitt.

Bearbeiten : Wie Remus Rusanu wies darauf hin, auf einigen DBMS-Implementierungen wie SQL2005, die großen Objekttypen zu einer separaten Tabelle transparent gespeichert sind, effektiv den praktischen Nachteil Linderung große Aufzeichnungen haben. Die Einführung dieser Funktion bestätigt implizit die die [true] einzelne Schwäche Tabelle Ansatz.

Ich suchte nur die SO in dieser Frage verwiesen Posting. Ich in der Regel Sache, dass, während das andere Posting macht einige gültige Punkte, wie intrinsische Datenintegrität (da alle CRUD Aktionen an einem bestimmten Punkt Atom sind), aber im Großen und Ganzen und es sei denn, der relativ untypisch Anwendungsfälle (wie das Element mit Tabelle als Repository meist für einzelne Elemente gleichzeitig abgefragt), ist der Leistungsvorteil mit dem beiden Tabellen-Ansatz (wobei Indizes für „header“ Tabelle effizienter sein wird, Abfragen, etc. viel schneller nicht die binären Daten benötigen zurückkehren . etc.)

Und der beiden Tabellen Ansatz hat weitere Vorteile bei der Konstruktion verschiedene Arten von binären Objekten in differnt Kontext liefern entwickelt. Zum Beispiel, sagen diese Elemente sind Bilder (GIFs, JPGs etc.). Zu einem späteren Zeitpunkt möchten Sie auch eine kleine Vorschau-Version dieser Bilder liefern (und / oder eine hallo-Auflösung), die Wahl der dies durch den Kontext (Benutzereinstellung, niedrige Bandbreiten-Kunden, Teilnehmer vs. Besucher getrieben usw.). In einem solchen Fall sind nicht nur die Betriebsprobleme mit der einzelnen Tabelle Ansatz verbunden, die mehr akut, wird das Modell vielseitiger.

Es kann auf separates Bild helfen, (N) TEXT, (N) VARCHAR (max) und varbinary (max) Spalten aus größeren Tabellen rein für einige Einschränkungen von SQL Server.

Zum Beispiel vor 2012 war es nicht möglich, eine Clustertabelle auf Online neu erstellen, wenn es LOBs enthalten. Auf der anderen Seite könnte man über diese Beschränkungen nicht kümmern, so die Tabelle einrichten wie Ihre Daten verbunden sind, ist das besser, was zu tun.

Falls Sie wollen physisch aus der Tabellenzuordnungseinheit der LOB-Daten zu halten, noch um die „großen Werttypen aus Zeile“ einstellen Tabellenoption .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top