Mysql
 sql >> Database >  >> RDS >> Mysql

Come spiego una query con parametri in MySQL

Finché stai facendo solo un uguale (e non un mi piace, che può avere effetti di cortocircuito), sostituiscilo semplicemente con un valore:

EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';

Poiché non sta effettivamente eseguendo la query, i risultati non dovrebbero differire da quelli effettivi. Ci sono alcuni casi in cui questo non è vero (ho già menzionato LIKE). Ecco un esempio dei diversi casi di LIKE :

SELECT * FROM a WHERE a.foo LIKE ?
  1. Param 1 ==Foo - Può utilizzare una scansione dell'indice se esiste un indice.
  2. Param 1 ==%Foo - Richiede una scansione completa della tabella, anche se esiste un indice
  3. Param 1 ==Foo% - Può utilizzare una scansione dell'indice, a seconda della cardinalità dell'indice e di altri fattori

Se ti stai unendo, e la clausola where cede a una combinazione impossibile (e quindi andrà in cortocircuito). Ad esempio:

SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?

Se il primo e il secondo parametro sono gli stessi, ha un piano di esecuzione e, se sono diversi, andrà in cortocircuito (e restituirà 0 righe senza colpire alcun dato)...

Ce ne sono altri, ma quelli sono tutto ciò a cui riesco a pensare in questo momento...