Subject | performance beetween select and procedure |
---|---|
Author | tempo93fr |
Post date | 2002-01-09T13:56:51Z |
Could you tell me what is the best for performance issues :
first :
I have to retrieve often records from détail table.
What should I use, a simple select like this :
SELECT DONNEES_TP.NUM_ETAB,
DONNEES_TP.ID_ANNEE,
DONNEES_TP.SOMME_PAYEE,
DONNEES_TP.FRAIS_GESTION,
DONNEES_TP.ZAE,
DONNEES_TP.MINI,
DONNEES_TP.BCOMMUNE,
DONNEES_TP.BDPT,
DONNEES_TP.BREG,
DONNEES_TP.COTIS_COMMUNE,
DONNEES_TP.COTIS_DPT,
DONNEES_TP.COTIS_REG,
DONNEES_TP.COTIS_TPHF,
DONNEES_TP.COTIS_TP,
DONNEES_TP.BTF,
DONNEES_TP.BNTF,
DONNEES_TP.SAL,
DONNEES_TP.RECETTES,
DONNEES_TP.BB,
DONNEES_TP.ABATTEMENT,
DONNEES_TP.REI,
DONNEES_TP.RAA,
DONNEES_TP.ECRETEMENT,
DONNEES_TP.V1976,
DONNEES_TP.RECOUVREMENT,
DONNEES_TP.DEG_CAMION,
DONNEES_TP.NB_CAMION,
DONNEES_TP.SALAIRE_BRUT,
DONNEES_TP.ABAT_SALAIRE,
DONNEES_TP.BTCCI,
DONNEES_TP.BTCM,
DONNEES_TP.COTIS_TCCI,
DONNEES_TP.COTIS_TCM,
DONNEES_TP.TAUX
FROM DONNEES_TP
WHERE
(
(DONNEES_TP.NUM_ETAB = :VNUM_ETAB)
)
or a procedure like this :
CREATE PROCEDURE TESTPROC (
VNUM_ETAB FLOAT)
RETURNS (
NUM_ETAB FLOAT,
ID_ANNEE INTEGER,
SOMME_PAYEE DOUBLE PRECISION,
FRAIS_GESTION DOUBLE PRECISION,
ZAE CHAR (1),
MINI CHAR (3),
BCOMMUNE DOUBLE PRECISION,
BDPT DOUBLE PRECISION,
BREG DOUBLE PRECISION,
COTIS_COMMUNE DOUBLE PRECISION,
COTIS_DPT DOUBLE PRECISION,
COTIS_REG DOUBLE PRECISION,
COTIS_TPHF DOUBLE PRECISION,
COTIS_TP DOUBLE PRECISION,
BTF DOUBLE PRECISION,
BNTF DOUBLE PRECISION,
SAL DOUBLE PRECISION,
RECETTES DOUBLE PRECISION,
BB DOUBLE PRECISION,
ABATTEMENT DOUBLE PRECISION,
REI DOUBLE PRECISION,
RAA DOUBLE PRECISION,
ECRETEMENT DOUBLE PRECISION,
V1976 DOUBLE PRECISION,
RECOUVREMENT DOUBLE PRECISION,
DEG_CAMION DOUBLE PRECISION,
NB_CAMION DOUBLE PRECISION,
SALAIRE_BRUT DOUBLE PRECISION,
ABAT_SALAIRE DOUBLE PRECISION,
BTCCI DOUBLE PRECISION,
BTCM DOUBLE PRECISION,
COTIS_TCCI DOUBLE PRECISION,
COTIS_TCM DOUBLE PRECISION,
TAUX DOUBLE PRECISION)
AS
BEGIN
FOR
SELECT DONNEES_TP.NUM_ETAB,
DONNEES_TP.ID_ANNEE,
DONNEES_TP.SOMME_PAYEE,
DONNEES_TP.FRAIS_GESTION,
DONNEES_TP.ZAE,
DONNEES_TP.MINI,
DONNEES_TP.BCOMMUNE,
DONNEES_TP.BDPT,
DONNEES_TP.BREG,
DONNEES_TP.COTIS_COMMUNE,
DONNEES_TP.COTIS_DPT,
DONNEES_TP.COTIS_REG,
DONNEES_TP.COTIS_TPHF,
DONNEES_TP.COTIS_TP,
DONNEES_TP.BTF,
DONNEES_TP.BNTF,
DONNEES_TP.SAL,
DONNEES_TP.RECETTES,
DONNEES_TP.BB,
DONNEES_TP.ABATTEMENT,
DONNEES_TP.REI,
DONNEES_TP.RAA,
DONNEES_TP.ECRETEMENT,
DONNEES_TP.V1976,
DONNEES_TP.RECOUVREMENT,
DONNEES_TP.DEG_CAMION,
DONNEES_TP.NB_CAMION,
DONNEES_TP.SALAIRE_BRUT,
DONNEES_TP.ABAT_SALAIRE,
DONNEES_TP.BTCCI,
DONNEES_TP.BTCM,
DONNEES_TP.COTIS_TCCI,
DONNEES_TP.COTIS_TCM,
DONNEES_TP.TAUX
FROM DONNEES_TP
WHERE
(
(DONNEES_TP.NUM_ETAB = :VNUM_ETAB)
)
INTO
:NUM_ETAB,
:ID_ANNEE,
:SOMME_PAYEE,
:FRAIS_GESTION,
:ZAE,
:MINI,
:BCOMMUNE,
:BDPT,
:BREG,
:COTIS_COMMUNE,
:COTIS_DPT,
:COTIS_REG,
:COTIS_TPHF,
:COTIS_TP,
:BTF,
:BNTF,
:SAL,
:RECETTES,
:BB,
:ABATTEMENT,
:REI,
:RAA,
:ECRETEMENT,
:"V1976",
:RECOUVREMENT,
:DEG_CAMION,
:NB_CAMION,
:SALAIRE_BRUT,
:ABAT_SALAIRE,
:BTCCI,
:BTCM,
:COTIS_TCCI,
:COTIS_TCM,
:TAUX
DO
BEGIN
SUSPEND;
END
END
Second
For my master table join with few others. I use a select that users
can modify the where clause.
do you think it is the best way or should I use a procedure to make
all the stuff for the join and then use a where clause applying to
the procedure ?
Thanks.
first :
I have to retrieve often records from détail table.
What should I use, a simple select like this :
SELECT DONNEES_TP.NUM_ETAB,
DONNEES_TP.ID_ANNEE,
DONNEES_TP.SOMME_PAYEE,
DONNEES_TP.FRAIS_GESTION,
DONNEES_TP.ZAE,
DONNEES_TP.MINI,
DONNEES_TP.BCOMMUNE,
DONNEES_TP.BDPT,
DONNEES_TP.BREG,
DONNEES_TP.COTIS_COMMUNE,
DONNEES_TP.COTIS_DPT,
DONNEES_TP.COTIS_REG,
DONNEES_TP.COTIS_TPHF,
DONNEES_TP.COTIS_TP,
DONNEES_TP.BTF,
DONNEES_TP.BNTF,
DONNEES_TP.SAL,
DONNEES_TP.RECETTES,
DONNEES_TP.BB,
DONNEES_TP.ABATTEMENT,
DONNEES_TP.REI,
DONNEES_TP.RAA,
DONNEES_TP.ECRETEMENT,
DONNEES_TP.V1976,
DONNEES_TP.RECOUVREMENT,
DONNEES_TP.DEG_CAMION,
DONNEES_TP.NB_CAMION,
DONNEES_TP.SALAIRE_BRUT,
DONNEES_TP.ABAT_SALAIRE,
DONNEES_TP.BTCCI,
DONNEES_TP.BTCM,
DONNEES_TP.COTIS_TCCI,
DONNEES_TP.COTIS_TCM,
DONNEES_TP.TAUX
FROM DONNEES_TP
WHERE
(
(DONNEES_TP.NUM_ETAB = :VNUM_ETAB)
)
or a procedure like this :
CREATE PROCEDURE TESTPROC (
VNUM_ETAB FLOAT)
RETURNS (
NUM_ETAB FLOAT,
ID_ANNEE INTEGER,
SOMME_PAYEE DOUBLE PRECISION,
FRAIS_GESTION DOUBLE PRECISION,
ZAE CHAR (1),
MINI CHAR (3),
BCOMMUNE DOUBLE PRECISION,
BDPT DOUBLE PRECISION,
BREG DOUBLE PRECISION,
COTIS_COMMUNE DOUBLE PRECISION,
COTIS_DPT DOUBLE PRECISION,
COTIS_REG DOUBLE PRECISION,
COTIS_TPHF DOUBLE PRECISION,
COTIS_TP DOUBLE PRECISION,
BTF DOUBLE PRECISION,
BNTF DOUBLE PRECISION,
SAL DOUBLE PRECISION,
RECETTES DOUBLE PRECISION,
BB DOUBLE PRECISION,
ABATTEMENT DOUBLE PRECISION,
REI DOUBLE PRECISION,
RAA DOUBLE PRECISION,
ECRETEMENT DOUBLE PRECISION,
V1976 DOUBLE PRECISION,
RECOUVREMENT DOUBLE PRECISION,
DEG_CAMION DOUBLE PRECISION,
NB_CAMION DOUBLE PRECISION,
SALAIRE_BRUT DOUBLE PRECISION,
ABAT_SALAIRE DOUBLE PRECISION,
BTCCI DOUBLE PRECISION,
BTCM DOUBLE PRECISION,
COTIS_TCCI DOUBLE PRECISION,
COTIS_TCM DOUBLE PRECISION,
TAUX DOUBLE PRECISION)
AS
BEGIN
FOR
SELECT DONNEES_TP.NUM_ETAB,
DONNEES_TP.ID_ANNEE,
DONNEES_TP.SOMME_PAYEE,
DONNEES_TP.FRAIS_GESTION,
DONNEES_TP.ZAE,
DONNEES_TP.MINI,
DONNEES_TP.BCOMMUNE,
DONNEES_TP.BDPT,
DONNEES_TP.BREG,
DONNEES_TP.COTIS_COMMUNE,
DONNEES_TP.COTIS_DPT,
DONNEES_TP.COTIS_REG,
DONNEES_TP.COTIS_TPHF,
DONNEES_TP.COTIS_TP,
DONNEES_TP.BTF,
DONNEES_TP.BNTF,
DONNEES_TP.SAL,
DONNEES_TP.RECETTES,
DONNEES_TP.BB,
DONNEES_TP.ABATTEMENT,
DONNEES_TP.REI,
DONNEES_TP.RAA,
DONNEES_TP.ECRETEMENT,
DONNEES_TP.V1976,
DONNEES_TP.RECOUVREMENT,
DONNEES_TP.DEG_CAMION,
DONNEES_TP.NB_CAMION,
DONNEES_TP.SALAIRE_BRUT,
DONNEES_TP.ABAT_SALAIRE,
DONNEES_TP.BTCCI,
DONNEES_TP.BTCM,
DONNEES_TP.COTIS_TCCI,
DONNEES_TP.COTIS_TCM,
DONNEES_TP.TAUX
FROM DONNEES_TP
WHERE
(
(DONNEES_TP.NUM_ETAB = :VNUM_ETAB)
)
INTO
:NUM_ETAB,
:ID_ANNEE,
:SOMME_PAYEE,
:FRAIS_GESTION,
:ZAE,
:MINI,
:BCOMMUNE,
:BDPT,
:BREG,
:COTIS_COMMUNE,
:COTIS_DPT,
:COTIS_REG,
:COTIS_TPHF,
:COTIS_TP,
:BTF,
:BNTF,
:SAL,
:RECETTES,
:BB,
:ABATTEMENT,
:REI,
:RAA,
:ECRETEMENT,
:"V1976",
:RECOUVREMENT,
:DEG_CAMION,
:NB_CAMION,
:SALAIRE_BRUT,
:ABAT_SALAIRE,
:BTCCI,
:BTCM,
:COTIS_TCCI,
:COTIS_TCM,
:TAUX
DO
BEGIN
SUSPEND;
END
END
Second
For my master table join with few others. I use a select that users
can modify the where clause.
do you think it is the best way or should I use a procedure to make
all the stuff for the join and then use a where clause applying to
the procedure ?
Thanks.