Loading:

Zaplanuj Przeprowadzke - Ściągnij Darmową Aplikację na Androida

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);


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=5288

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: divix
Ranga: Administrator serwisu Punktów: 37169
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-17 v.1.5 | design: diviXdesign & rainbowcolors