Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] to zapytanie mnie przerosło!, OR EXISTS
termin
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 13.05.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam, robię z kolegą sklep internetowy i on to zrobił na MS SQL a ja na MySQL.

Nie wiem czy dobrze rozumiem ale zapytanie jakie kolega mi podesłał działa na MS SQL błyskawicznie, a identyczne zapytanie z tymi samymi polami i danymi na MySQL trwa i trwa i trwa. Pola oczywiście mają ustawione indeksy ale to nie przyspiesza.

Czy takie zapytanie jest prawidłowe dla MySQL-a czy w ogóle występuje coś takiego jak OR EXISTS ? da się to zapytanie przerobić pod MySQL-a ?

  1. SELECT cta_KntKarty.Knt_Akronim, cta_Promocje.Prm_PrmId,
  2.  
  3. cta_TwrKarty.Twr_GIDNumer, cta_TwrKarty.Twr_Kod, cta_Promocje.Prm_Upust,
  4.  
  5. cta_Promocje.Prm_RodzajCeny, cta_Promocje.Prm_Typ
  6.  
  7. FROM cta_KntKarty INNER JOIN
  8.  
  9. cta_TwrKarty ON cta_TwrKarty.Twr_GIDNumer = 72583 INNER JOIN
  10.  
  11. cta_Promocje ON (cta_KntKarty.Knt_GIDNumer = cta_Promocje.Prm_KntNumer OR EXISTS
  12.  
  13. (SELECT 1 AS Expr1
  14.  
  15. FROM cta_KntLinki
  16.  
  17. WHERE (cta_KntKarty.Knt_GIDNumer = KnL_GIDNumer) AND (CTA.KntKarty.Knt_GidTyp = KnL_GIDTyp) AND
  18.  
  19. (cta_Promocje.Prm_KnGNumer = KnL_GrONumer) AND (KnL_GrOTyp = -32))) AND
  20.  
  21. (cta_TwrKarty.Twr_GIDNumer =cta_Promocje.Prm_TwrNumer OR EXISTS
  22.  
  23. (SELECT 1 AS Expr1
  24.  
  25. FROM cta_TwrLinki
  26.  
  27. WHERE (cta_TwrKarty.Twr_GIDNumer = TwL_GIDNumer) AND (cta_TwrKarty.Twr_GIDTyp = TwL_GIDTyp) AND
  28.  
  29. (cta_Promocje.Prm_TwGNumer = TwL_GrONumer) AND (TwL_GrOTyp = -16)))
  30.  
  31. WHERE (cta_KntKarty.Knt_Akronim = '50033')


Ten post edytował termin 6.06.2010, 16:54:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Konstrukcja występuje, bo przecież błędu składniowego nie dostałeś. Problem polega na tym, że obydwa podzapytania są zkorelowane z zapytaniami zewnętrznymi. Może MSSQL potrafi to ładnie zoptymalizować, ale MySQL w tym momencie na pewno nie.

Prawdopodobnie da się to przepisać na bardziej wydajną postać. Musiałbyś napisać jakie masz tabele i co to zapytanie ma wyciągać.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 19:28