У меня есть запрос, выполняющий что-то вроде:
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 это ключи в другой таблице. Это приложение для форума, кратко объясняющее: c # получает все форумы из базы данных и сохраняет их в кеше приложения. Прежде чем C # вызывает процедуру, которая получает потоки для этих форумов и для этого пользователя, c # выполняет некоторую логику, фильтруя коллекцию "все форумы", учитывая разрешения и некоторую бизнес-логику. Тайм-аут происходит в базе данных, а не в самом приложении. Выполнение всей этой логики в запросе потребует большого количества внутренних соединений, и я не уверен на 100%, что смогу сделать все это внутри процедуры.
Я использую SQL Server 2000