J'ai une question pour le rapport:requête SQL a plus de lignes plus courtes retour
select
hp.KOD, hp.AD, hp.HES_ID,
sum(fs.BORC_TUTARI) B_T,
sum(fs.ALACAK_TUTARI) A_T,
max(hp.UST_HESAP_ID) UST_HESAP_ID,
max(hp. ALT_HESAP_SAYISI) ALT_HESAP_SAYISI
from
W_HES_PLAN hp, FIS_SATIRLARI fs, FIS_BASLIGI FB,
(select h.HESAP_KODU HESKOD, FS.HESAP_ID, FS.FIS_ID
from HESAP_PLANI H, FIS_SATIRLARI fs
where H.HESAP_ID = FS.HESAP_ID
group by h.HESAP_KODU,FS.HESAP_ID, FS.FIS_ID) CC
where
CC.HESKOD like HP.KOD+'%'
and FB.FIS_ID = FS.FIS_ID
and CC.HESAP_ID = fs.HESAP_ID
and CC.FIS_ID = FS.FIS_ID
-- and hp.KOD>='' and hp.KOD<='200'
group by
hp.KOD, hp.AD, hp.HES_ID
order by
HP.KOD
sous-requête de la table CC retourne 676.427 lignes en 7 sec, mais toutes requête retourne 14.000 lignes dans 23 min.I ne peut pas Comprendre cela.Pourquoi plus de lignes sont-elles plus courtes? Toute suggestion d'optimisation?
Si vous souhaitez obtenir de l'aide sur les performances, veuillez fournir le plan d'exécution de la requête pour la sous-requête elle-même et pour la requête globale. Aussi, je recommanderais de supprimer les jointures implicites, il est difficile de dire comment vos tables sont jointes. – mallan1121
[Mauvaises habitudes à lancer: en utilisant les anciens JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - que l'ancien style * la liste des tables * style séparé par des virgules a été remplacé par la syntaxe * proper * ANSI 'JOIN' dans l'ANSI - ** 92 ** SQL Standard (** il y a 25 ans **) et son l'utilisation est déconseillée –
Conceptuellement, je ne pense pas qu'il soit difficile de comprendre pourquoi l'ensemble de la requête prend plus de temps, même si elle renvoie moins de lignes. Il repose sur la requête interne, donc vous vous attendez à ce qu'elle dure au moins aussi longtemps que la requête interne. De plus, vous ajoutez les frais de l'extérieur (y compris 'like'). Et l '«addition» peut fonctionner plus comme une multiplication en termes de frais généraux. Le nombre de lignes n'est pas non plus important lorsque vous utilisez l'agrégation dans le résultat. Combien de lignes si vous ne cumulez pas? C'est une question rhétorique, vous n'avez pas besoin de répondre. –