Я использовал IN с довольно большими списками идентификаторов - я подозреваю, что проблема с памятью не в самом запросе. Как вы получаете результаты?
Этот запрос, например, с живого сайта:
SELECT DISTINCT c.id, c.name FROM categories c
LEFT JOIN product_categories pc ON c.id = pc.category_id
LEFT JOIN products p ON p.id = pc.product_id
WHERE p.location_id IN (
955,891,901,877,736,918,900,836,846,914,771,773,833,
893,782,742,860,849,850,812,945,775,784,746,1036,863,
750,763,871,817,749,838,986,794,867,758,923,804,733,
949,808,837,741,747,954,939,865,857,787,820,783,760,
911,745,928,818,887,847,978,852
) ORDER BY c.name ASC
Мой первый проход по коду ужасно наивен, на одной странице около 10 таких запросов, и база данных не мигает.
Вы, конечно, могли бы запустить список значений в 100 КБ, что было бы совсем другой историей.