Loading:


Optymalizacja podzapytań - MySQL

Trochę praktycznych porad w celu pisania szybszych zapytań z podzapytaniami.

 

  • Zamiast połączeń (ang. join) lepiej używać podzapytań: (patrz Listing 1.0)

  •  

    zamiast: (patrz Listing 1.1)
  •  

     

  • Należy w miarę możliwości używać klauzul, specyficznych dla podzapytań, w zapytaniach zewnętrznych niż wewnętrznych. Na przykład należy użyć: (patrz Listing 2.0)

     

    zamiast: (patrz Listing 2.1)

  •  

    Albo, należy napisać raczej: (patrz Listing 2.2)

     

    niż (patrz Listing 2.3)

     

  • Należy raczej używać podzapytań wierszowych niż skorelowanych. Na przykład należy raczej użyć: (patrz Listing 3.0)

     

    niż: (patrz Listing 3.1)

     

  • Należy używać raczej NOT (a = ANY (...)) niż <> ALL (...).

  • Należy używać raczej x = ANY (tablica zawierająca (1,2)) niż x=1 OR x=2.

  • Należy używać raczej ANY niż EXISTS.

 

Ponadto, MySQL posiada swoje wewnętrzne mechanizmy, które powodują znaczną optymalizację podzaptań, na przykład wykonuje tylko jeden raz podzapytania nieskorelowane, lub zastępuje złożone operacje porównawcze odpowiednimi funkcjami.



Napisz Artyku³

Listing

--Listing 1.0
SELECT DISTINCT col1 FROM tab1 WHERE tab1.col1 IN (
SELECT col1 FROM tab2);

--Listing 1.1
SELECT DISTINCT tab1.col1 FROM tab1, tab2
WHERE tab1.col1 = tab2.col1;

--Listing 2.0
SELECT * FROM tab1 WHERE s1 IN
(SELECT s1 FROM tab1 UNION ALL SELECT s1 FROM tab2);

--Listing 2.1
SELECT * FROM tab1 WHERE s1 IN
(SELECT s1 FROM tab1) OR s1 IN (SELECT s1 FROM tab2);

--Listing 2.2
SELECT (SELECT col1 + 5 FROM tab1) FROM tab2;

--Listing 2.3
SELECT (SELECT col1 FROM tab1) + 5 FROM tab2;

--Listing 3.0
SELECT * FROM tab1
WHERE (col1,col2) IN (SELECT col1,col2 FROM tab2);

--Listing 3.1
SELECT * FROM tab1
WHERE EXISTS (SELECT * FROM tab2 WHERE tab2.col1=tab1.col1
AND tab2.col2=tab1.col2);




Dodano przez: divix
Ranga: Administrator serwisu Punktów: 38523
Komentarze użytkowników
    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2024 v.1.5 | design: diviXdesign & rainbowcolors