2013-03-19 9 views
6

Sto cercando di capire come verrà eseguita la seguente istruzione su più record.Un'istruzione SQL interromperà l'esecuzione sulla prima corrispondenza in un'istruzione OR?

SELECT * FROM test 
WHERE product='$product' 
AND (summary LIKE '%$keywords%' OR exp LIKE '%$keywords%') 
ORDER BY `$order_by` DESC; 

Sono abbastanza nuovo per SQL ecco è quello che mi piacerebbe sapere:

1. Quando si esegue una query SQL, credo che esamina ogni riga della tabella. Quando viene trovata una corrispondenza, dove memorizza temporaneamente il risultato fino a quando tutti i risultati possono essere restituiti?

2. Nell'esempio di cui sopra, dicono che stiamo guardando singola riga nella tabella e c'è una corrispondenza per summary. La query continuerà ad essere eseguita OR exp LIKE '%$keywords%' quando ha già trovato una corrispondenza?

+2

[6.3.3.3 Ordine di valutazione regole] (http://stackoverflow.com/a/909770/1037210). – Lion

risposta

2
  1. Spetta al motore del database decidere come memorizzare il risultato temporaneo. Ogni implementazione del motore di database potrebbe essere diversa. Ciò che ottiene il client è un set di risultati costituito da righe (se la query produce risultati)

  2. No, se la prima condizione in OR è true, non controlla la seconda condizione (qual è il punto di farlo in ogni caso, si conosce il risultato finale già)

+0

Grazie, questo è quello che pensavo. Volevo essere sicuro al 100%. – kaizenCoder

1
  1. In memoria, a seconda delle DBMS.
  2. quando trova una corrispondenza probabilmente non continuerà. Tutto dipende dalla particolare implementazione SQL, ma in generale non sarebbe efficiente continuare a cercare le corrispondenze, quindi direi probabilmente no.
Problemi correlati