Rune1983 Guru
17. januar 2019 - 09:22 Der er 5 kommentarer og
1 løsning

Forespørgselshastighed på tværs af de databaser.

Hej Eksperten
Har arbejdet på at forbedre en søgefunktion i vores system. Selve søgning tog omkring 20 sek for at få opstillet data fra kaldet.
Havde en enkel JOIN i kaldet til at hente dato og status fra sidste rapport for det givne ID i Arkiv databasen.
Viste sig hvis jeg fjernede dette join fra kaldet. Så kom mit kald ned på ca. 0,5-1 sek. i stedet for 20 sek. (Det kan vi lide)
Lavede så et kald til Arkiv database for at hente de sidste data. Det bliver så et kald for hvert enkelt result fra første kald af.

Kan det virkelig passe man mister så meget hastighed på ens kald ved at flette to databaser sammen i et sql kald?
arne_v Ekspert
17. januar 2019 - 12:54 #1
Normalt ikke.

Er de felter der joines paa enten primaenoegle eller har et indeks paa sig?
Rune1983 Guru
17. januar 2019 - 12:59 #2
Min join ser sådan her ud.

LEFT JOIN (
SELECT ID, max(Dato_For_Eftersyn) AS 'DatoSidste', Status_rapport, Note_AfslutUdenService, Datostempel
FROM `DB-Eftersyn-Arkiv`.`eftersyn_sr_id`
GROUP BY ID
)SQL1
ON SQL1.ID = s.Produkt_ID
Rune1983 Guru
17. januar 2019 - 13:00 #3
Kolonne ID har index ... er ikke primærnøgle ... det er rapportnummeret
arne_v Ekspert
17. januar 2019 - 13:20 #4
Du skal have indeks paa (medmindre primaernoegle):

ID (join)
Produkt_ID (join)
Dato_For_Eftersyn (max)
Rune1983 Guru
17. januar 2019 - 14:13 #5
Det er lidt svært at forklare.
Tror problemet ligger i at den lille sub query trækker for mange rækker ud og undersøger hver enkel.
SELECT ID, max(Dato_For_Eftersyn) AS 'DatoSidste', Status_rapport, Note_AfslutUdenService, Datostempel
FROM `DB-Eftersyn-Arkiv`.`eftersyn_sr_id`
GROUP BY ID
(13500) rækker data

Så det bedre at undlade den og så lave et kald for hver række af første query.
SELECT ID, max(Dato_For_Eftersyn) AS 'DatoSidste', Status_rapport, Note_AfslutUdenService, Datostempel
FROM eftersyn_sr_id
WHERE ID = (ID fra første række)
(1) række data
Rune1983 Guru
18. januar 2019 - 09:48 #6
Opfølgning.

Taget udpluk af SQL sætning da den er meget lang med mange where conditions i bunden.

*************************
*************************
Kald der tog mega lang tid

SELECT
s.Produkt_ID,
...
SQL1.DatoSidste,
SQL1.Status_rapport,
SQL1.Note_AfslutUdenService,
SQL1.Datostempel

FROM ...

LEFT JOIN (
    SELECT ID, max(Dato_For_Eftersyn) AS 'DatoSidste', Status_rapport, Note_AfslutUdenService, Datostempel
    FROM `DB-Eftersyn-Arkiv`.`eftersyn_sr_id` GROUP BY ID
)SQL1
ON SQL1.ID = s.Produkt_ID
...
*************************
*************************

OMSKRIVES TIL

SELECT
s.Produkt_ID
,
...
,
(SELECT SQL1.Dato_For_Eftersyn
    FROM `DB-Eftersyn-Arkiv`.`eftersyn_sr_id` SQL1
    WHERE SQL1.ID = s.Produkt_ID
    GROUP BY SQL1.ID
    ORDER BY SQL1.Dato_For_Eftersyn DESC
) AS 'DatoSidste'
,
(SELECT SQL1.Status_rapport
    FROM `DB-Eftersyn-Arkiv`.`eftersyn_sr_id` SQL1
    WHERE SQL1.ID = s.Produkt_ID
    GROUP BY SQL1.ID
    ORDER BY SQL1.Dato_For_Eftersyn DESC
) AS 'Status_rapport'
,
(SELECT SQL1.Note_AfslutUdenService
    FROM `DB-Eftersyn-Arkiv`.`eftersyn_sr_id` SQL1
    WHERE SQL1.ID = s.Produkt_ID
    GROUP BY SQL1.ID
    ORDER BY SQL1.Dato_For_Eftersyn DESC
) AS 'Note_AfslutUdenService'
,
(SELECT SQL1.Datostempel
    FROM `DB-Eftersyn-Arkiv`.`eftersyn_sr_id` SQL1
    WHERE SQL1.ID = s.Produkt_ID
    GROUP BY SQL1.ID
    ORDER BY SQL1.Dato_For_Eftersyn DESC
) AS 'Datostempel'

FROM ...
...

*************************
*************************
Ved at omksirve den får jeg alt data ud i et træk som jo var mest optimalt. Og super hurtig udførelse.
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

Opret Preview

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





Premium
Tirsdag kårer Microsoft de bedste partnere i Danmark: Proactive og Delegate fører feltet an med flest nomineringer
Landets ypperste Microsoft-partnere bliver tirsdag hædret af Microsofts danske ledelse. 20 virksomheder har fået en indbydelse til det prestigefyldte arrangement. Her er et overblik over, hvem der er blevet nomineret.
Computerworld
Biden sender skjult besked til kode-folket: "Hvis du læser dette, har vi brug for din hjælp”
En stående invitation er blevet opdaget i kildekoden på Det Hvide Hus' hjemmeside. Men den er kun til de eksperter, der selv kan finde den.
CIO
Podcast: Her er seks gode råd om ledelse og digitalisering fra danske top-CIO'er
The Digital Edge: Vi har talt med 17 af Danmarks dygtigste digitale ledere - og samlet deres seks bedste råd om digitalisering og ledelse. Få alle rådene på 26 minutter i denne episode af podcasten The Digital Edge.
White paper
Sådan kan du arbejde effektivt uanset tid, sted og type af enhed
Hvad nu hvis dit arbejde, din information, dine processer og teknologien bag ved, var organiseret på en måde så det passede til din organisation – alt sammen guidet af en intelligent udgave af det digitale arbejdsrum? Det er visionen bag Atea og Citrix´s samarbejde med digital workspace – en smartere og mere effektiv måde at arbejde på. I dette whitetpaper kan du derfor læse om, hvordan du kan skabe et mere effektivt og brugervenligt arbejdsrum uanset tid, sted og enhed. En løsning der på en gang er både enkel og som sætter brugeren i centrum.