Один из способов обойти длинный список значений оператора IN - вместо этого ПРИСОЕДИНИТЬСЯ к временной таблице. Это был обходной путь, когда Oracle не поддерживал более 1000 значений для IN.
Если у вас есть такой запрос
SELECT * FROM mytable WHERE column IN (value1, value2, ..., valueN)
затем замените его на:
CREATE TEMPORARY TABLE temp_table AS
SELECT column FROM <source that contains value1, value2, ..., valueN>
SELECT * FROM mytable JOIN temp_table ON (mytable.column = temp_table.column)
Асимптотически это должно работать лучше, чем при использовании IN (по крайней мере, в Oracle).