Qual è più veloce "dove col=?o col=?o col=? "O "dove col in (?,?,?)" In C con informix (.ec / esql)?

StackOverflow https://stackoverflow.com/questions/7384294

  •  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"?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top