Qual è più veloce "dove col=?o col=?o col=? "O "dove col in (?,?,?)" In C con informix (.ec / esql)?
-
29-10-2019 - |
Domanda
Il nostro codice è scritto in C e DB è Informix. Stiamo ottimizzando il codice nel programma ESQL e abbiamo trovato la seguente query:
AGGIORNAMENTO [TABELLA] SET [COLONNA CHIAVE PRINCIPALE]= [NUOVA CHIAVE] WHERE COL=?O COL=?...
Il numero di colonne nella clausola where viene preparato dinamicamente.Abbiamo un controllo del conteggio superiore per interrompere la preparazione della clausola Where e fare un aggiornamento, quindi tornare indietro e iniziare a preparare il resto.UPPER_MARK è "30"
if (where_parameter_count>= UPPER_MARK)
__ esegui aggiornamento__
__ clean_and_continue;/ * ricomincia a prepararti * / __
Abbiamo pensato di sostituire WHERE .. OR con WHERE ... IN
UPDATE [TABLE] SET [PRIMARY KEY COLUMN]= [NEW KEY] WHERE COL IN (?,? ...)
Sarà più veloce di "dove o"?
Soluzione
L'sintassi si risolve fino alla stessa cosa per quanto riguarda l'ottimizzatore di query.Non farà alcuna differenza.
L'unico vantaggio per l'approccio in listino è che l'aggiunta di ulteriori predicati non cambierà la logica, I.e.
x IN (a, b) AND y = z
.
e
x = a OR x = b AND y = z
.
sono non la stessa cosa.