Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    7

    condizioni sql: on o where?

    Salve a tutti,

    da un po' di tempo ho un dubbio che non mi sono riuscito a chiarire.

    Per spiegare riporto un esempio nel quale effettuo un join tra due tabelle e con una condizione:

    tab_1(cd, descrizione, volume);

    tab_2(cd, descrizione, peso);

    QUERY 1:

    select tab_1.cd,
    tab_1.descrizione,
    tab_1.volume,
    tab_2.peso
    from tab_1 left outer join tab_2
    on tab_1.cd=tab_2.cd
    where tab_1.cd > 10;


    QUERY 2:

    select tab_1.cd,
    tab_1.descrizione,
    tab_1.volume,
    tab_2.peso
    from tab_1 left outer join tab_2
    on tab_1.cd=tab_2.cd AND tab_1.cd > 10;

    Ora i risultati delle due query saranno uguali, ma mi domando:
    la seconda dovrebbere essere eseguita più velocemente oppure il dmbs (e.g. mysql) si preoccupa di ottimizzare la prima?
    Perché a rigor di logica nella prima, viene effettuato il join POI vengono selezionate solamente quelle con cd >10, mentre nella seconda viene fatto il join solamente con le tuple che hanno cd>10 (a meno che non interferisca il dbms).

    Grazie a tutti (ma soprattutto a chi mi svelerà il mistero ).

  2. #2
    non ci sono misteri. Il manuale recita:

    The conditional_expr used with ON is any conditional expression of the form that can be used in a WHERE clause. Generally, you should use the ON clause for conditions that specify how to join tables, and the WHERE clause to restrict which rows you want in the result set.
    http://dev.mysql.com/doc/refman/5.0/en/join.html

    Per essere confrontato un file va comunque letto ed e' tutto sommato l'operazione piu' onerosa. Quindi applicare restrizioni record per record oppure sulla tabella temporanea creata dalle condizioni dichiarate nella JOIN non cambia praticamente nulla. Il suggerimento del manuale lo trovo corretto e lo applico perche' permette sicuramente una maggior pulizia e chiarezza in lettura (per l'umano) della query. Da una parte le uguaglianze dall'altra le ulteriori restrizioni.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.