Question

SO afficher certains détails avantages en performances par rapport à des tables dérivées en ce qui concerne temporaires.

Autre que la performance, quelles situations existent pour lesquelles une table dérivée ne serait pas approprié.

Une réponse par message avec un exemple serait utile.

Était-ce utile?

La solution

Je préférerais faire un autojointure sur une table temporaire d'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 deux fois toute la requête:

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...;

A condition d'utiliser une marque de base de données supportant cette syntaxe (Microsoft, Oracle, IBM, PostgreSQL).

Autres conseils

Champ d'application pourrait être l'un. Je pense que les tables temporaires peuvent être accessibles à d'autres transactions / processus, etc. tables dérivées sont limitées au bloc dans lequel ils sont déclarés.

Si vous devez accéder aux données de la table temporaire dans 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...;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top