Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Dubbio query

  1. #1

    Dubbio query

    Ciao a tutti
    con me in ufficio è arrivata gente nuova che scrive query diversamente da quelle che scrivo io.
    Il risultato direi che è lo stesso ma non capisco se sia più performante quella che potrei scrivere io o quella che scrivono loro.
    Supponiamo di avere 2 tabelle

    Nomi Cognomi
    id | nnome id | cnome | idnome
    1 | silvio 1 | berlusca | 1
    2 | claudio 2 | lippi | 2
    3 | giovanni 3 | agnelli | 3
    4 | pascoli | 3


    Praticamente io avrei scritto una query di questo tipo:

    select * from cognomi
    left join nomi on cognome.idnome = nomi.id


    Loro scrivono


    select * from cognomi,nomi
    where idnome = nomi.id


    Questo è un esempio stupido ma considerate che una tabella del db ha oltre 5 milioni di righe e le tabelle che uniamo sono anche 7 / 8

    voi che mi dite ?

  2. #2
    non cambia nulla, è solo una forma diversa di scrittura.

  3. #3
    Ciao!

    A mio avviso è più corretta la prima. Puoi impostare che lo script calcoli la differenza di tempo tra quando inizia la query e quando finisce così vedi quale, tra le due, risulti più snella.

    Spero di esserti stato utile.

    Ciau!
    Thorthegod

  4. #4
    anche per me è più giusta la prima e non la seconda

    ma prima di far polemica volevo avere certezze
    non posso fare la verifica di quel tempo perchè per "ora" solo loro hanno la gestione di quel db .... s

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    le due query non sono affatto uguali, la prima che usa la left join seleziona tutti i record della tabella cognomi ed eventualmente quelli della tabella nomi che hanno id corrispondente nella tabella cognomi.
    La seconda usa un inner join implicita che seleziona solo i record delle tabelle che si possono mettere in relazione tramite il campo idnome.

    per cui possono avere performance diverse, dipende da come sono i dati.
    Sono corrette entrambe formalmente, fanno cose diverse.

    poi dipende anche dalla base dati ..

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Attenzione sono due cose MOLTO diverse

    La prima prende solo elementi presenti in ENTRAMBE le tabelle

    La seconda (left join) prende gli elementi della prima tabella anche se non presenti nella seconda, valorizzando eventualmente con NULL i campi della seconda tabella nel caso in cui non ci fossero dati
    Mettiamo la tua situazione leggermente modificata, ovvero con un "filippo" che non ha un record corrispondente nella tabella "cognomi"
    Codice PHP:
    Nomi                Cognomi
    id  
    |   nnome       id  cnome     idnome
    1   
    |   silvio      1   berlusca  1
    2   
    |   claudio     2   lippi     2
    3   
    |   giovanni    3   agnelli   3
    4   
    |   filippo 
    Questa query
    SELECT nnome,cnome FROM Nomi, Cognomi WHERE Cognomi.idnome = Nomi.id
    Darà questo risultato
    Codice PHP:
    silvio    berlusca
    claudio   
    lippi
    giovanni  
    agnelli 
    Mentre questa
    SELECT nnome,cnome FROM Nomi LEFT JOIN Cognomi ON Cognomi.idnome = Nomi.id
    darà questo risultato
    Codice PHP:
    silvio    berlusca
    claudio   
    lippi
    giovanni  
    agnelli
    filippo   
    NULL 

  7. #7
    hai ragione non ho messo i controlli ma cmq ci sarebbero per i campi null

    ma se non ci fosse filippo quale sarebbe più performante ?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    A mio avviso non devi ragionare in quei termini, ma in termini di "cosa mi serve" e "cosa è più corretto"
    Se dai per SCONTATO che ci sia sempre una corrispondenza o che in caso di mancata corrispondenza non deve essere fornito alcun dato usi la prima forma
    Se esiste la possibilità che la seconda tabella non abbia alcune corrispondenze e devono comunque essere reperiti i dati della prima tabella usi la seconda

    Le performance sono le stesse, se vengono usate chiavi primarie numeriche e campi indicizzati e quindi non mi proccuperei mai di quello ma della correttezza concettuale del mio script

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 © 2026 vBulletin Solutions, Inc. All rights reserved.