#Table vs. Type as Table

In diesem Video möchte ich Ihnen zeigen, welchen Vorteil Sie bei der Wahl der Datenspeicherung zwischen #Table und Tabellen-Typen haben.

Werden sogenannte #temporäre Tabelle im Programm-Code verwendet, bedeutet dies, daß der SQL-Server die Tabelle nicht in der Benutzerdatenbank speichert, sondern in der temporären Datenbank, namens „TempDB“, welches für das System von sehr wichtiger Bedeutung ist. Microsoft empfiehlt die „TempDB“ auf das schnellste Laufwerk zu legen und nicht mit unnötigen Objekten zu verlangsamen. Meistens passiert das aber ungewollt, denn in der Entwicklung haben sich oft, gerade aus historischen Tagen, die „kurzweile Datenspeicherung in #tmp“ eingebürgert.

Da die Hash-Table #tmp immer in der Systemdatenbank „TempDB“ abgelegt wird, kann es dauerhaft zu Leistungsverlusten kommen. Je nachdem wie viele Connections parallel offen sind und wie viele Daten verarbeitet werden. Sollten die #tmp nicht manuell wieder gelöscht werden, so wird der SQL-Server mit dem Schließen der Connection diese #tmp selbst löschen. Man stelle sich nun vor, 5 Personen arbeiten zum gleichen Zeitpunkt an der gleichen Tätigkeit. Für alle 5 Mitarbeiter werden #tmp Tabellen angelegt.

Jeder dieser Mitarbeiter sammelt Datensätze in der eigenen #tmp Tabelle, was dann nun das 5-Fache bedeutet. Es wird unnötig Speicher verbraucht und zzgl. die Festplatte beschrieben. Weiterhin kann das bedeuten, dass auch eine Person, mehrfache Verbindungen zur Datenbank aufbaut, je nachdem wir die Software / Webseite programmiert wurde. Schauen Sie sich das Video an und staunen Sie, denn ich erreiche mehr als 100% der Leistung bei gleichem Inhalt.

{–Script–}
— Temp-Table
DROP TABLE IF Exists #tbl;
Create Table #tbl(ID int, Inhalt varchar(255))
declare @zahl int = 0
while @zahl < 1000
BEGIN
insert into #tbl(id, Inhalt)
VALUES (@zahl, ‚Test‘);
SET @zahl += 1;
END
set statistics time on;
set statistics IO on;
select * from #tbl

— Table-Type
DROP TYPE IF Exists dbo.tbl;
Create Type dbo.tbl as Table (ID int primary key nonclustered, Inhalt varchar(255))
with (Memory_optimized = on);
declare @zaehler int = 0
declare @tbl dbo.tbl
while @zaehler < 10000
BEGIN
insert into @tbl(id, Inhalt)
VALUES (@zaehler, ‚Test‘);
SET @zaehler += 1;
END
set statistics time on;
set statistics IO on;
select * from @tbl;
Facebook
Twitter
LinkedIn
WhatsApp
Email