Generell gilt, wenn der IN
list zu groß wird (für einen schlecht definierten Wert von "zu groß", der normalerweise im Bereich von 100 oder kleiner liegt), wird es effizienter, einen Join zu verwenden und bei Bedarf eine temporäre Tabelle zu erstellen, um die Zahlen zu speichern.
Wenn die Zahlen dicht sind (keine Lücken - was die Beispieldaten vermuten lassen), können Sie mit WHERE id BETWEEN 300 AND 3000
noch besser abschneiden .
Vermutlich gibt es jedoch Lücken in der Menge, an welcher Stelle es vielleicht doch besser ist, sich an die Liste der gültigen Werte zu halten (es sei denn, die Anzahl der Lücken ist relativ gering, in diesem Fall könnten Sie Folgendes verwenden:
WHERE id BETWEEN 300 AND 3000 AND id NOT BETWEEN 742 AND 836
Oder was auch immer die Lücken sind.