2010-06-30 4 views
5

Cette SO post détaille certains avantages en termes de performance en ce qui concerne les tables dérivées et temporaires.Quand ne convient-il pas d'utiliser des tables dérivées?

Outre les performances, quelles sont les situations pour lesquelles une table dérivée ne serait pas appropriée. Une réponse par article avec un exemple serait utile.

+0

Ce [question est étiquetée pour SQL Server] (http : //stackoverflow.com/questions/2326395/which-one-have-performance-derived-tables-or-temporary-tables), donc l'information devrait être considérée comme spécifique et non pour toutes les bases de données. –

Répondre

1

Je préférerais faire un auto-rejoindre sur une table temporaire qu'une table dérivée.

CREATE TEMPORARY TABLE foo AS SELECT ...; 

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

Versus en utilisant une table dérivée, où vous devez écrire toute requête deux fois:

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

Mais une autre solution consiste à utiliser expressions de table commune qui sont légèrement différentes des tables dérivées:

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

À condition d'utiliser une marque de base de données prenant en charge cette syntaxe (Microsoft, Oracle, IBM, PostgreSQL).

1

La portée peut être une. Je pense que les tables temporaires peuvent être rendues accessibles à d'autres transactions/processus, etc. Les tables dérivées sont limitées au bloc dans lequel elles sont déclarées.

1

Si vous devez accéder aux données de la table temporaire plusieurs requêtes il pourrait être moins coûteuse pour éviter de générer les données temporaires à plusieurs reprises:

CREATE TEMPORARY TABLE foo AS SELECT ...; 

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

-- sometime later 

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