In generale, se il IN
list diventa troppo grande (per un valore mal definito di 'troppo grande' che di solito è nella regione di 100 o inferiore), diventa più efficiente usare un join, creando una tabella temporanea se necessario per contenere i numeri.
Se i numeri sono un insieme denso (nessuna lacuna, come suggeriscono i dati di esempio), puoi fare ancora meglio con WHERE id BETWEEN 300 AND 3000
.
Tuttavia, presumibilmente ci sono delle lacune nel set, a quel punto potrebbe essere meglio andare con l'elenco dei valori validi dopo tutto (a meno che le lacune non siano relativamente poche, nel qual caso potresti usare:
WHERE id BETWEEN 300 AND 3000 AND id NOT BETWEEN 742 AND 836
O qualunque siano le lacune.