Wie viele Spalten sind zu viele für eine SQL Server 2005-Tabelle?
Habe ich eine Anfrage zum zulassen einer dynamischen Tabelle mit 1000 Spalten(zufällig von meinem Endbenutzer). Dies scheint wie eine schlechte Idee zu mir. Es ist ein anpassbares Tisch, so wird es eine Mischung aus varchar(200)
und float
Spalten(float besten Spiele die Anwendungen c++ - Typ double). Diese Datenbank wird meist ein index für eine legacy-Anwendung und dient als reporting-repository. Es ist nicht das system der Aufzeichnung. Die Anwendung hat Tausende von Datenpunkten sehr wenige von denen könnten normalisiert werden, aus.
Alle Ideen, was die Auswirkungen auf die Leistung sind? Oder eine ideale Tisch-Größe-partition diese auch down?
Da ich nicht weiß, welche Felder aus der 20k Wert von Entscheidungen, die der Endanwender auswählen, die Normalisierung der Tabellen ist nicht möglich. Ich trennen kann diese Daten aus mehreren Tabellen, Die ich hätte, um dynamisch zu verwalten (Felder können Hinzugefügt werden oder senkte. Die Zeilen werden dann gelöscht und das system der Aufzeichnung erneut analysiert, um die Tabelle ausfüllen.) Meine Präferenz ist es, zurück zu schieben und normalisieren alle 20k bits von Daten. Aber ich sehe nicht, dass das passiert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese riecht wie ein schlechtes design für mich.
Dinge zu beachten:
Werden die meisten dieser Spalten werden NULL-Werte enthalten?
Werden viele genannt werden Property001, Property002, Property003, etc...?
Wenn dem so ist, empfehle ich Ihnen, überdenken Sie Ihre Daten-Normalisierung.
vom SQL2005 Dokumentation:
SQL Server 2005 kann mit bis zu zwei Milliarden Tabellen pro Datenbank und 1.024 Spalten pro Tabelle. (...) Die maximale Anzahl von bytes pro Zeile beträgt 8.060. Diese Einschränkung ist für Tabellen gelockert, die mit varchar -, nvarchar -, varbinary-oder sql_variant-Spalten, dazu, dass die gesamte Tabelle definiert die Breite größer als 8.060 Byte ist. Die Längen von jeweils einer dieser Spalten müssen noch fallen innerhalb der Grenze von 8.000 bytes, aber Ihre kombinierte Breite überschreitet den Grenzwert von 8.060 byte in einer Tabelle.
was ist die Funktion dieser Spalten? warum nicht besser aufteilen in die master-Tabelle, Eigenschaften (lookup-Tabellen) und Werte?
Wann immer Sie das Bedürfnis zu Fragen, was Grenzen hat das system, Sie haben ein design-problem.
Wenn Sie wurden gefragt, "Wie viele Zeichen kann ich in ein varchar?", dann sollten Sie sich nicht mit varchars überhaupt.
Wenn Sie ernsthaft wissen wollen, wenn 1000 Spalten okay ist, dann ist Sie dringend brauchen, um die Reorganisation der Daten. (Normalisierung)
MS SQL Server hat ein limit von 1024 Spalten pro Tabelle, so dass Sie gehen zu werden, die genau auf den Rand von dieser. Mit varchar(200) Spalten, werden Sie in der Lage zu gehen, vorbei an der 8k byte pro Zeile beschränken, da SQL speichern 8k auf der Seite "Daten" und dann den überlauf der Daten außerhalb der Seite.
SQL 2008 Addierte Spalten mit geringer Dichte für Szenarien wie dieses - wo würden Sie haben eine Menge von Spalten mit null-Werten in Ihnen.
Verwenden Von Spalten Mit Geringer Dichte
http://msdn.microsoft.com/en-us/library/cc280604.aspx
Als Regel: je größer der Tisch, desto langsamer die Leistung. Viele dünne Tabellen sind zu bevorzugen, um eine fat-Durcheinander in der Tabelle.
Wenn Ihre Tabelle ist, die Breite es ist fast sicherlich ein design-Problem. Es gibt keine wirkliche Regel, wie viele vorzuziehen ist, habe ich nie wirklich kommen über Tabellen mit mehr als 20 Spalten in der realen Welt. Nur group by-relation. Es ist ein RDBMS, nachdem alle.
Diese große Leistung-und Daten-Probleme. Es muss wahrscheinlich normalisiert werden.
Während der SQl server wird Ihnen eine Tabelle erstellen, die mehr als 8060 bytes inteh Zeile, wird es NICHT lassen Sie speichern mehr Daten als die, die in es. Sie könnten Daten unerwartet abgeschnitten werden (und noch schlimmer nicht erst mehrere Monate später konnte das geschehen, durch die Zeit, die Behebung dieses monstrum ist dringend exptremely hart).
Abfragen wird dies auch zu einem realen problem werden. Wie würden Sie wissen, welche der 1000 Spalten zu suchen die Daten? Soll jede Abfrage, Fragen, für, alle 1000 Spalten in der where-Klausel?
Und die Idee, dass dies Benutzer anpassbar ist beängstigend, in der Tat. Warum sollte sich der Anwender muss eine 1000-Felder anpassen? Die meisten Anwendungen, die ich gesehen habe, die geben dem Benutzer eine chance zur Anpassung einiger Felder eine kleine Grenze (in der Regel weniger als 10). Wenn es ist, dass Sie viel anpassen zu müssen, dann wird die Anwendung nicht gemacht hat, einen guten job zu definieren, was der Kunde tatsächlich braucht.
Manchmal als Entwickler müssen Sie nur aufstehen und sagen, Nein, das ist eine schlechte Idee. Dies ist eine jener Zeiten.
Was sollte man stattdessen tun (außer normalisieren), ich denke, wir würden mehr Informationen benötigen, um Sie in die richtige Richtung.
Und BTW, float ist ungenau, Datentyp und sollte nicht verwendet werden, für Felder, auf denen Berechnungen stattfinden, wenn Sie falsche Ergebnisse.
Da muss ich widersprechen, mit allen hier.....Ich weiß, es klingt verrückt, aber Tabellen mit Hunderten von Spalten ist das beste, was ich je getan habe.
Ja viele Spalten, die Häufig null-Werte;
Ja, ich konnte die Normalisierung der es nur ein paar Tische und umsetzen;
Ja, es ist ineffizient
Aber es ist unglaublich schnell und einfach zu analysieren, Daten in den Spalten in endlose unterschiedliche Möglichkeiten
Verschwenderisch und unelegant - Sie werden nie bauen, die alles andere als nützlich!
Dass sind zu viele. Mehr als 50 Spalten breit ist, und Sie Fragen nach Schwierigkeiten in der performance, code-Wartung, und Fehlersuche wenn es Probleme gibt.
Scheint wie eine Menge. Ich würde zuerst sicherstellen, dass die Daten normalisiert. Das könnte Teil des Problems. Welche Art von Zweck diese Daten dienen? Ist es für Berichte? Werden die Daten ändern?
Ich würde denken, eine Tabelle, die Breite wäre ein Albtraum Leistung und Wartung-weisen.
Hast du von der Anzeige Ihrer letzten (1000 Spalten) der Tabelle als Ergebnis einer Kreuztabellenabfrage? Ihre ursprüngliche Tabelle nur wenige Spalten, aber viele tausend Datensätze.
Können Sie bitte näher auf dein problem? Ich denke, dass niemand wirklich zu verstehen, warum Sie benötigen, um diese 1000 Spalten!