Re : Optimisation
Posted in 1996
Translated from English by DrWatson — View original
Jaroslaw Pyszkiewicz a écrit : > > Quelqu'un aurait-il une idée pour accélérer une telle requête ? > > SELECT SUM(przydzial.godziny) INTO arr_przyd_sc[counter].suma_rok > FROM przydzial > WHERE YEAR(przydzial.miesiac)=YEAR(przyd_bufor.miesiac) > AND przydzial.zad_id = przyd_bufor.zad_id > > Voici la description de la table : > "przydzial" : zad_id INTEGER, > prac_id INTEGER, > miesiac DATETIME YEAR TO MONTH, > godziny INTEGER FWIW, 1) Créez un index sur zad_id s'il n'en existe pas déjà un. 2) Il semble que przyd_bufor soit une structure dans le code et non une table. Essayez donc de définir une variable entière temporaire et de lui affecter la valeur YEAR(przyd_bufor.miesiac) 3) Réécrivez l'instruction de la façon suivante : DEFINE foo INTEGER foo = YEAR(przyd_bufor.miesiac SELECT SUM(przydial.godziny) INTO arr_przyd_sc[counter].suma_rok FROM przydzial WHERE przydzial.zad_id = przyd_bufor.zad.id AND YEAR(przydzial.miesiac) = foo Cela dit, l'utilisation de la variable n'améliorera peut-être pas — et très probablement n'améliorera pas — les performances. (À moins que quelqu'un chez Informix n'ait tout gâché ;-) Mais votre principal gain viendra de la création de l'index et du fait d'amener la première instruction à utiliser cet index. -Mikey