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: 0
    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-2025 v.1.5 | design: diviXdesign & rainbowcolors