Subselects
Subselect sind ein Feature, das nicht jeder Datenbankserver mitbringt. TSQL kann Subselects !
Durch Subselect können aus einer Select- Abfrage weitere Select- Abfragen gestartet werden. Um z.B. die größte Datei in einer Tabelle zu bestimmen, die Dateien und ihren Speicherplatzverbrauch auflistet, muss zuerst die maximale Dateigröße bestimmt werden. Mit diesem Wert kann dann der Datensatz gesucht werden, der diesen Speicherplatzverbrauch hat:
use dmsmin go Declare @MaxSize as BigInt -- 1) Größe der größten Datei bestimmen select @MaxSize = Max(SizeInBytes) from data.FileInfos -- 2) Name der größten Daten bestimmen select [name], SizeInBytes from data.FileInfos where SizeInBytes = @MaxSize
Mittels Subselect können beide Schritte in einer einzigen Select- Anweisung zusammengefasst werden. Variablen werden nicht mehr benötigt:
-- Name der größten Daten select [name], SizeInBytes from data.FileInfos where SizeInBytes = (select Max(SizeInBytes) from data.FileInfos) go
Temporäre Tabellen
In seltenen Fällen ist es sinnvoll, in einer Sitzung Ergebnisse von Abfragen zwischenzuspeichern, um in weiteren Abfragen auf diese zurückzugreifen. Dies hat aber den Nachteil, das der Server hierdurch massiv belastet wird ! In jedem Fall sollte geprüft werden, ob durch Views oder Subselects kein alternativer Lösungsweg besteht.
use dmsmin go drop table #sizepertype go -- Liste des Speicherplatzverbrauches pro typ in temp- Tabelle speichern select ext, Sum(SizeInBytes)/1024.0 as SumSizeInKB into #SizePerType from data.FileInfos group by ext order by SumSizeInKb select * from #SizePerType -- Wie groß ist der Anteil des Speichers pro Typ in bezug auf den Gesamtverbrauch select ext, Round(100 * SumSizeInKB / (select Sum(SizeInBytes)/1024.0 from data.FileInfos), 1) as [Anteil an Gesamt] from #SizePerType