Nasce una disputa tra colleghi e dopo la consueta rissa decidiamo di interpellarvi: è più performante fare una select con clausola where "(x=3) or (x=1)" oppure fare una union di due select differenti?
Nasce una disputa tra colleghi e dopo la consueta rissa decidiamo di interpellarvi: è più performante fare una select con clausola where "(x=3) or (x=1)" oppure fare una union di due select differenti?
una
la union non è mai performante
Penso una. Considera che però non ho mai fatto una union!
Ciaoz
questa la devi spiegare...Originariamente inviato da ddies
la union non è mai performante
Si puo rispondere soltanto sapendo come sono implementate internamente le due varianti dal DBMS usato.
L'SQL come linguaggio non permette di fare assunzioni sulle prestazioni di un costrutto o dell'altro se non si conoscono le indicazioni di chi ha implementato un particolare DBMS, essendo l'SQL un linguaggio fondamentalmente dichiarativo (dichiara quale risultato voglio raggiungere, non come raggiungerlo).
andrea, la tua dichiarazione e' vera a meta'. ci sono statements sql che si valutano a occhio, senza ricorrere al cronometro (IMHO, OC!).
prendi ad esempio gli statement del thread
1o statement
SELECT campi FROM tabella WHERE x=1 OR x=3
confrontato con
2o statement
SELECT campi FROM tabella WHERE x=1
UNION
SELECT campi FROM tabella WHERE x=3
non credo si debba andare a scomodare il tizio che ha implementato il DBMS per vedere quale e' piu' performante...
Perche' no?
potrebbe benissimo avere implementato un ottimizzatore (piuttosto scarso per verita') che esegue la prima esattamente come la seconda.
O la seconda come la prima (buon ottimizatore di query)
..... dai, rimaniamo con i piedi per terra
ok