2015-07-17 4 views
0

J'ai une requête SQL qui utilise un produit cartésien sur une grande table. Cependant, j'ai seulement besoin d'une colonne de l'une des tables. Est-ce que cela fonctionnerait mieux, si je sélectionnais seulement cette colonne avant d'utiliser le produit cartésien?Amélioration des performances du produit cartésien SQL par réduction des colonnes

Donc, autrement dit, ce serait:

SELECT A.Id, B.Id 
FROM (SELECT Id FROM Table1) AS A , Table2 AS B; 

plus rapide que cela, étant donné que Table1 a plus de colonnes que Id ?:

SELECT A.Id, B.Id 
FROM Table1 AS A , Table2 AS B; 

Ou le nombre de colonnes pas d'importance ?

Répondre

0

Sur la plupart des bases de données, les deux formulaires auraient le même plan d'exécution.

Le premier pourrait être pire sur une base de données (telle que MySQL) qui matérialise les sous-requêtes.

La seconde devrait être meilleure avec les index sur les deux tables. . . table1(id) et table2(id). L'index serait utilisé pour obtenir la valeur plutôt que les données de base.

0

Essayez-le vous-même! Mais généralement avoir une sous-requête réduire le nombre de lignes permettra d'améliorer les performances. Votre requête devrait, cependant, être écrite différemment:

select a.id aid, b.id bid from 
(Select id from table1 where id=<specific_id>) a, table2 b 
+0

Je suis vraiment désolé, j'ai confondu les mots colonne et ligne (corrigé maintenant). Je voulais seulement réduire les colonnes, pas les lignes. – isnulltrue

+0

Dans ce cas, je vais avec Gordon: cela ne fera probablement aucune différence sur la forme que vous utiliserez car vous ne sortirez pas toutes les colonnes de toute façon. – cars10m