17. januar 2019 - 09:22Der 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?
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
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
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.
Synes godt om
Ny brugerNybegynder
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.