SQL Server-Leistung: GROUP BY int vs GROUP BY VARCHAR

8

Gibt es einen Leistungsunterschied bei der Gruppierung nach verschiedenen Datentypen? Zum Beispiel, wenn ich nach INT gruppiere, bekomme ich eine bessere Leistung als wenn ich nach varchar gruppiere?

    
richard 25.08.2011, 21:15
quelle

3 Antworten

9

Ich würde sagen GROUP BY INT ist schneller, da nur 4 Bytes in einem varchar-Feld gegen n Bytes geprüft werden.

    
Simon Hughes 25.08.2011, 21:20
quelle
4

Entscheiden Sie sich für einen Datentyp, der ausschließlich auf der Leistung des Datentyps in GROUP BY basiert? Sind es die gleichen Daten? Sie entscheiden nur, wie Sie 123456 als INT oder VARCHAR speichern? Haben Sie andere Faktoren berücksichtigt, z. B. die CPU-Kosten für die Konvertierung zwischen numerischen und String-Typen, wenn dies nicht unbedingt erforderlich ist? Der zusätzliche Speicher, der benötigt wird, um die gesamte Tabelle im Cache zu halten? Der Zeilenoverhead für VARCHAR gibt die Länge an? Was ist mit Speicherkosten (z. B. 1234567890 benötigt 4 Byte als INT , aber '1234567890' benötigt 10 Byte + Zeilenoverhead als VARCHAR )? Wie steht es mit Kompression? Wie wird der Index für diese Spalte mit dem gruppierten Index in der Tabelle ausgerichtet, was sich darauf auswirken kann, wie nützlich "bereits gruppiert" sein wird?

Mit anderen Worten, ich würde GROUP BY Leistung in einer Blase nicht berücksichtigen.

    
Aaron Bertrand 25.08.2011 22:46
quelle
3

Die Gruppierung auf einem int wäre etwas schneller als die Gruppierung auf einem varchar, aber was wirklich einen Unterschied macht, ist, wenn es einen Index für das Feld gibt, den die Datenbank für die Gruppierung verwenden kann.

    
Guffa 25.08.2011 21:31
quelle