Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] to zapytanie mnie przerosło!
Forum PHP.pl > Forum > Bazy danych > MySQL
termin
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')
Mchl
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ć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.