Ich habe eine große SQL Server-Tabelle, die etwa wie folgt aussieht:Umgang mit duplizierten Daten in SQL Server
ImageId int Page int FSPath varchar(256) ImageFrame int ...
Die Tabelle speichert einen Eintrag für jede Seite einer Reihe von Bilddateien. Dies geschieht, um die Tabelle zu ermöglichen, Bilder darzustellen, wobei jede Seite durch eine andere Datei dargestellt wird, und mehrseitige Bilddateien, die die Seiten in derselben Datei enthalten. Wenn ich mit einem mehrseitigen Setup zu tun habe, ist der Wert der FSPath Spalte genau für jede Seite im gleichen Dokument dupliziert, die vielen Platz frisst (dieser Tisch allein zur Zeit ist ~ 5GB). Es scheint sehr verschwenderisch zu sein, die Daten auf diese Weise zu duplizieren, aber ich war nicht in der Lage, eine alternative Lösung zu finden, mit der ich zufrieden bin.
Das Verwendungsmuster für diese Tabelle wird von Suchvorgängen basierend auf dem Primärschlüssel (ImageId/Page) für den Pfad (und andere Spalten) dominiert, aber ich muss auch effizient neue Daten einfügen und gelegentlich löschen können.
Wenn ich eine Nachschlagetabelle für die Pfadelemente erstellen und eine Pfadelement-ID in die Seitentabelle einfügen, müsste ich sie sowohl durch die ID als auch durch den Pfad indizieren, was das Szenario mit einem eindeutigen Pfad verletzen würde Stück für jede Seite und komplizieren das Einfügen neuer Daten, wo der Pfad in der Nachschlagetabelle vorhanden sein kann oder nicht. Außerdem würde das Löschen einer Zeile in der Hauptseitentabelle dazu führen, dass ich den zugehörigen Pfadeintrag bereinige, wenn er nicht mehr verwendet wird.
Ich hatte gehofft, dass ich eine aktualisierbare Sicht auf die verbundenen Tabellen erstellen konnte und SQL Server die Magie für mich tun, aber ich bekomme die Nachricht: Ansicht oder Funktion 'Scrap.dbo.PageView' ist nicht aktualisierbar, weil die Die Änderung betrifft mehrere Basistabellen. Versuchen, eine Einfügung durchzuführen.
Gibt es eine vernünftige Art und Weise, dies zu tun, die ich gerade fehlt bin, oder bin ich kein Glück?
Ich habe einige Performance-Probleme aufgrund der Datenträger-Seitenwechsel, die beim Laden dieser Einträge auftritt. Ich habe eine feste Breite char Ansatz untersucht, aber meine durchschnittliche Pfadlänge ist jetzt 25 Zeichen, Wechsel zu char (256) würde fast 10x meine Speicheranforderungen und mehr Festplattenfehler verursachen. –