2009-05-14 5 views
4

Ich habe Tabelle mit einigen Feldern, dass der Wert 1 0 sein wird. Diese Tabellen werden extrem große Überstunden sein. Ist es gut, den Bit-Datentyp zu verwenden, oder ist es besser, einen anderen Typ für die Leistung zu verwenden? Natürlich sollten alle Felder indiziert sein.Ist das BIT-Feld in SQL Server schneller als das Feld int?

Antwort

2

Offiziell Bit wird am schnellsten sein, vor allem, wenn Sie Nullen nicht zulassen. In der Praxis spielt dies selbst bei großen Anwendungen keine Rolle. Aber wenn der Wert nur 0 oder 1 ist, warum nicht ein bisschen? Klingt wie der beste Weg, um sicherzustellen, dass der Wert nicht mit ungültigen Sachen gefüllt wird, wie 2 oder -1.

7

Ich kann Ihnen keine Statistiken zur Leistung geben, jedoch sollten Sie immer den Typ verwenden, der Ihre Daten am besten repräsentiert. Wenn alles, was Sie wollen, 1-0 ist, sollten Sie unbedingt das Bitfeld verwenden.

Je mehr Informationen Sie Ihrer Datenbank geben können, desto wahrscheinlicher ist es, dass sie richtig geraten.

0

Wie ich es verstehe, benötigen Sie noch ein Byte, um eine Bitspalte zu speichern (aber Sie können 8-Bit-Spalten in einem einzigen Byte speichern). Wenn Sie also eine große Anzahl (wie viele?) Dieser Bitspalten haben, können Sie ein wenig Speicherplatz sparen. Wie Yishai sagte, wird es wahrscheinlich keinen großen Unterschied in der Performance machen (obwohl ein bisschen besser zu einem booleschen Code in Anwendung übersetzt werden 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 einen dritten Wert in der Zukunft sehen können, könnte es das Leben ein wenig leichter machen, wenn dieser Tag kommt, um ein Tinyint zu verwenden.

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 ungefähren 50/50-Verteilung könnten Sie tatsächlich einen größeren Treffer erzielen, wenn Sie den Index auf dem neuesten Stand halten, als er bei der Abfrage der Tabelle erhalten würde.

+1

nicht sicher, ob dies für ältere Versionen von SQL Server wahr war, aber eigentlich Nach [MSDN] (https://msdn.microsoft.com/en-us/library/ms177603.aspx), 'BIT' Feld benutzt wirklich ein einzelnes Bit, aber alle 'BIT'-Spalten in einer Tabelle müssen zwingend ein Vielfaches von 8 Bit verwenden. – Sushruth

Verwandte Themen