Avatar billede pct Nybegynder
18. september 2015 - 11:00 Der er 3 kommentarer og
1 løsning

View med udtræk af en-til-mange relation

Hej Eksperter.
Jeg skal have lavet et view hvor jeg skal komme frem til et udtræk hvor jeg får alle linier for et given produkt, hvis det findes med et givent sprogId skal dette bruges ellers bruges orginal sproget.
For mig er det uden betydning om lokalsproget evt skal ligge i separat tabel, som i mit eksempel eller alle i samme tabel.

Nedenstående query virker, og tager 0,0001 sek. Det er fint.
Men nå jeg laver den som view kan jeg jo ikke have produktId'en med, og derfor tager en select * fra viewet 3,6 sek. Når det så skal kaldes små 5000 gange bliver det alt for langsomt.

SELECT tOrg.`tsmID`,tOrg.`tsmArtID`,tOrg.`tsmOrder`,
IF (ISNULL(tS.tsmID), tOrg.tsmEZmerkmal, tS.tsmEZmerkmal) AS tsmEZmerkmal,
IF (ISNULL(tS.tsmID), tOrg.tsmEZwert, tS.tsmEZwert) AS tsmEZwert,
tOrg.`tsmSprId`, tS.tsmID,
IF (ISNULL(tS.tsmID), tOrg.tsmID, tS.tsmID) AS groupId
FROM `media`.`1_tbesachmerkmal` tOrg
LEFT JOIN `media`.`1_tbesachmerkmal_se` tS
ON tOrg.`tsmArtID` = tS.tsmArtID
WHERE tOrg.tsmArtID = 8884
GROUP BY groupId;

Er der nogen der har en idé til en smartere/hurtigere metode?

Per :o)
Avatar billede arne_v Ekspert
19. september 2015 - 03:21 #1
Jeg tror at du maa konkludere at MySQL's query optimizer ikke er saerlig god til at haandtere select fra view.

Jeg tror at du skal overveje at lave det som en SP.
Avatar billede vagnk Juniormester
19. september 2015 - 17:50 #2
Jeg skal lige forstå det.

Det du har testet er et view som ovenstående dog uden linjen "WHERE tOrg.tsmArtID = 8884" f.eks. "MitView". Derefter laver du en query som:
SELECT * FROM MitView WHERE WHERE tOrg.tsmArtID = 8884;

Og den query tager 3,6 sekunder?
Avatar billede pct Nybegynder
25. september 2015 - 09:17 #3
@arne_v. Det har jeg overvejet. Men udfordringen er, at Viewet bliber kaldt flere steder fra, og nogle steder er dette hardcodet :(

@vagnk: Where sætningen er ikke med i Viewet. Men når jeg kalder Viewet med where-sætningen tager det 3,6 sek :)
Avatar billede pct Nybegynder
17. november 2015 - 13:07 #4
Jeg lukker
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