2010-06-30 9 views
5

Diese SO post beschreibt einige Vorteile in der Leistung in Bezug auf abgeleitete vs. temporäre Tabellen.Wann ist es nicht angemessen, abgeleitete Tabellen zu verwenden?

Neben der Leistung gibt es Situationen, für die eine abgeleitete Tabelle nicht geeignet wäre.

Eine Antwort pro Beitrag mit einem Beispiel wäre hilfreich.

+0

Die [Frage für SQL Server markiert ist] (http : //stackoverflow.com/questions/2326395/which-one-have-better-performance-derived-tables-orternet-tables), daher sollten die Informationen als spezifisch für sie betrachtet werden und nicht für alle Datenbanken. –

Antwort

1

Ich würde lieber eine Self-Join auf eine temporäre Tabelle als eine abgeleitete Tabelle tun.

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

Versus eine abgeleitete Tabelle verwenden, in dem Sie die gesamte Abfrage zweimal schreiben:

SELECT ... 
FROM (SELECT ...) 
JOIN (SELECT ...) ON ...conditions...; 

Aber eine andere Lösung ist allgemeine Tabellenausdrücke zu verwenden, die von abgeleiteten Tabellen leicht unterschiedlich sind:

WITH foo AS (SELECT ...) 
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

Vorausgesetzt, Sie verwenden eine Datenbankmarke, die diese Syntax unterstützt (Microsoft, Oracle, IBM, PostgreSQL).

1

Scope könnte eins sein. Ich denke, dass temporäre Tabellen anderen Transaktionen/Prozessen usw. zugänglich gemacht werden können. Abgeleitete Tabellen sind auf den Block beschränkt, in dem sie deklariert sind.

1

Wenn Sie die Daten in der temporären Tabelle in mehrere Anfragen für den Zugriff haben könnte es weniger kostspielig sein, um die Temperaturdaten wiederholt zu vermeiden Erzeugung:

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo WHERE ...conditions...; 

-- sometime later 

SELECT ... FROM foo WHERE ...different conditions...;