У меня есть запрос, делающий что-то вроде:
SELECT FieldX, FieldY FROM A
WHERE FieldW IN (108, 109, 113, 138, 146, 160,
307, 314, 370, 371, 441, 454 ,457, 458, 479, 480,
485, 488, 490, 492, 519, 523, 525, 534, 539, 543,
546, 547, 550, 564, 573, 629, 642, 643, 649, 650,
651, 694, 698, 699, 761, 762, 768, 772, 773, 774,
775, 778, 784, 843, 844, 848, 851, 852, 853, 854,
855, 856, 857, 858, 859, 860, 861, 862, 863, 864,
865, 868, 869, 871, 872, 873, 891)
Имея предложение IN с таким количеством параметров, плохо ли это для производительности запросов? Я испытываю много тайм-аутов в своем приложении, и я считаю, что это может быть источником такого рода проблем. Могу ли я оптимизировать запрос без удаления чисел, используя любой хороший подсказку SQL?
EDIT:
@KM - это ключи в другой таблице. Это приложение для форума, вкратце объясняющее: С# получает все форумы из базы данных и сохраняет их в кэше приложений. Прежде чем С# вызовет процедуру, которая получает потоки для этих форумов и для этого пользователя, С# делает некоторую логическую фильтрацию коллекции "все форумы", учитывая разрешения и некоторую бизнес-логику. Тайм-аут происходит в базе данных, а не в самом приложении. Выполнение всей этой логики в запросе потребует много внутренних объединений, и я не уверен на 100%, что я могу сделать все это внутри процедуры.
Я использую SQL Server 2000