Frage

Ich habe Tabelle mit einigen Feldern, die den Wert 1 0. Diese Tabellen werden extrem große Überstunden sein wird. Ist es gut, Bitdatentyp zu verwenden oder ist es besser, andere Art für die Leistung zu verwenden? Natürlich werden alle Felder indiziert werden sollen.

War es hilfreich?

Lösung

Offiziell wird etwas sein, schnellste, vor allem, wenn Sie NULL-Werte nicht zulassen. In der Praxis Rolle, es kann nicht, auch bei großen Verwendungen. Aber wenn der Wert wird nur 0 oder 1, warum nicht ein wenig benutzen? Klingt wie das die beste Weg, um sicherzustellen, dass der Wert nicht mit ungültigen Sachen, wie 2 oder -1.

gefüllt werden

Andere Tipps

Ich kann Ihnen keine Statistiken geben auf die Leistung, aber man sollte immer die Art verwenden, die besten Vertreter Ihrer Daten. Wenn alles, was Sie wollen 1-0 ist dann absolut sollten Sie das Bit-Feld verwenden.

Je mehr Informationen können Sie Ihre Datenbank geben desto wahrscheinlicher ist es zu bekommen, ist es „Vermutungen“ rechts ab.

Wie ich es verstehe, müssen Sie noch ein Byte ein bisschen Spalte speichern (aber Sie können in einem einzigen Byte 8-Bit-Spalten speichern). So eine große Zahl, die (wie viele?) Dieser Bit-Spalten können Sie ein wenig auf Speicher speichern. Wie Yishai sagte, es wird wahrscheinlich nicht viel Unterschied in der Leistung machen (wenn auch ein wenig mehr schön zu einem boolean in Anwendungscode übersetzt wird).

Wenn Sie mit 100% sicher, dass die beiden Optionen für diese Spalte wird nie ändern Sie dann angeben, können mit allen Mitteln das Bit verwenden. Aber wenn Sie ein dritter Wert sehen in der Zukunft auftauchen könnten sie das Leben ein wenig leichter machen, wenn dieser Tag ein Tinyint zu verwenden kommt.

Nur ein Gedanke, aber ich bin mir nicht sicher, wie viel Gutes ein Index, den Sie auf dieser Spalte entweder tun, es sei denn, Sie die überwiegende Mehrheit der Zeilen sehen auf der einen Seite oder der anderen gehen. In einer etwa 50/50 Verteilung könnten Sie eigentlich mehr einen Hit nehmen den Index auf dem neuesten Stand zu halten, als es gewinnt man in der Abfrage die Tabelle sehen würde.

Es hängt davon ab.

Wenn Sie mögen, Geschwindigkeit wählt, ist dann int langsame Verwendung int (Tinyint um Platz zu sparen), da das Bit in where-Klausel zu maximieren (nicht drastisch, aber jede Millisekunde zählt). Stellen Sie auch die Spalte nicht null, die auch Dinge beschleunigt. Im Folgenden Link zur tatsächlichen Leistungsprüfung, die ich auf eigene Datenbank ausgeführt werden würde empfehlen, und es auch sofort durch die Verwendung nicht Nullen, Indizes und mit mehreren Spalten erweitern. Zu Hause habe ich versucht, sogar mehr Bit Spalten vs mehr Tinyint Spalten und Tinyint Spalten waren schneller (select count(*) where A=0 and B=0 and C=0) mit zu vergleichen. Ich dachte, dass SQL Server (2014), indem Sie nur ein Vergleich mit bitmask optimieren würde, so sollte es dreimal schneller, aber das war nicht der Fall. Wenn Sie Indizes verwenden, würden Sie mehr als 5000000 Reihen müssen (wie im Test verwendet wird) einen Unterschied zu bemerken (die ich nicht die Geduld habe mit mehreren Millionen Zeilen, die seit Füllung Tabelle zu tun, würde Alter auf meiner Maschine nehmen).

https://www.mssqltips.com/sqlservertip/4137/sql-server-performance-test-for-bit-data-type-in-a-where-clause/

Wenn Sie möchten, um Platz sparen, verwenden Sie etwas, da 8 von ihnen ein Byte während 8 tinyints ocuppy können, werden 8 Byte MESSE. Welche rund 7 Megabytes ist auf jede Million Zeilen gespeichert.

Die Unterschiede zwischen diesen beiden Fällen sind im Grunde vernachlässigbar und da etwas mit dem Kopf hat der signalisiert, dass die Spalte nur eine Flagge darstellt, würde ich empfehlen Bit verwendet wird.

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