Avatar billede lumse Nybegynder
04. april 2003 - 11:04 Der er 4 kommentarer og
2 løsninger

en lang query eller mange små?

Hej

Jeg er ved at lave en række rapporter fra en produktionsdatabase i PHP.
Disse rapporter trækker mange data ud af en MS SQL DB.
Der er tale om rimlig komplicerede rapporter, med mange data.

Nu er spørgsmålet. Er det meget skidt at bruge mange små og simple sql-querys som så bliver kaldt ofte pga løkker. I modsætningen til én stor meget uoverskuelig SQL-query, som henter alle data på én gang

Det er meget nemmere at udvikle de mange små, og efter min mening mere velstruktureret, men går det ud over hastigheden på SQL-serveren? og er det generelt forkert?
Avatar billede slash Nybegynder
04. april 2003 - 11:06 #1
er det flere gb data du arbejder med?
Avatar billede slash Nybegynder
04. april 2003 - 11:07 #2
Avatar billede bennytordrup Nybegynder
04. april 2003 - 11:14 #3
Jeg vil foretrække en stored procedure for at mindske netværkstrafik (jeg går ud fra, at serveren kører på en anden maskine). Så må det være op til brugerinterfacet at give oplysning om, at der sker noget.
Avatar billede lumse Nybegynder
04. april 2003 - 11:18 #4
Det er også planen at det skal laves som stored procedures, men så kan vi spørge igen, er mange små stored procedures ok i forhold til én stor?

Min query skal efterligne noget lignene:

*********************************
SELECT d.orderNo, d.batchNo, s.lotNo, o.recipeNo, r.recipeDescr, d.materialDescr,
    (SELECT r.batchSize * sum( r.dosingPct)/100000.) AS WantedAmount,
    d.obtainedAmount, s.siloNo,
    CONVERT(varchar(20), d1.dateTime, 13) AS BatchStart,
    CONVERT(varchar(20), d2.dateTime, 13) AS BatchFinished
    FROM recipeTable r INNER JOIN orderTable o ON
    r.orderNo = o.orderNo
        INNER JOIN dosingEventTable d ON
        d.orderNo = r.orderNo AND
        d.orderNo = o.orderNo AND
        d.materialNo = r.materialNo AND
        d.materialDescr = r.materialDescr  AND
        d.dosingEventCode = 2
            INNER JOIN siloLogTable s ON
            s.siloNo = d.siloNo AND
            s.setTime < d.dateTime AND
            d.dateTime < s.siloZeroTime
                INNER JOIN dosingEventTable d2 ON
                d2.orderNo = d.orderNo AND
                d2.batchNo = d.batchNo AND
                d2.dosingEventCode = 10
                    INNER JOIN dosingEventTable d1 ON
                    d1.orderNo = d.orderNo AND
                    d1.batchNo = d.batchNo AND
                    d1.recID IN (SELECT min(recID)
                          FROM dosingEventTable
                          GROUP BY orderNo, batchNo)   
       
GROUP BY d.orderNo, r.recipeDescr, o.recipeNo, d.batchNo,  d.materialNo,
        d.materialDescr, d.dosingEventCode, r.batchSize, d.recID,
        d.obtainedAmount, s.lotNo, s.siloNo, d1.dateTime, d2.dateTime
ORDER BY d.orderNo, d.batchNo, s.lotNo, d.materialDescr
*********************************************

Det er efter min mening for uoverskueligt hvis folk skal overtage det.
Men gør det den store preformance forskel at splitte den op i flere små, som bliver kaldt oftere?
Avatar billede bennytordrup Nybegynder
04. april 2003 - 11:22 #5
Hvis det er det, tror jeg ikke jeg ville skrive selve SQL'en om.

Måden, en SQL skrives på, har meget at sige omkring (u)overskuelighed :-)
Avatar billede lumse Nybegynder
04. april 2003 - 13:26 #6
Takker folkens :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester