![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема со скоростью запроса [D7, MSSQL]
Barmutik © (2004-11-19 10:10:00)Появилась следющего рода проблема в MS SQL Server 2000:
Есть таблица с некоторым набором полей. В таблице есть IDxx (типа int)- Primary key. Встала необходимость делать запросы следующего вида:
SELECT IDxx, MyField FROM MyTAble WHERE IDxx IN (.....)
Проблема заключается во времени реации сервера на запрос.
Если количество значений в IN не большое то запрос работает мгновенно... Но если она ставновится больше 500 ... то время реакции увеличивается до 8-10 секунд.... что не приемлимо...
Проблема абсолютно непонятна учитывая что в данной таблице порядка 4000 (4 тысячи всего) записей...
По данному полю построен индекс.... во время использования данной таблице в других запросах проблем со скоростью не возникает.
Повторный запрос происходит мгновенно .. что в принципе и понятно он находится в кэше сервера.
Серверный компьютер: 2-х процессорный на Intel Pentium 4 2.8 Gh c 2 Gb оперативки
Подскажите в чём грабли ...
Sergey13 (2004-11-19 10:48:00) [21]2[3] Barmutik (19.11.04 10:44)
Значит ты возможноне доработал структуру БД.
Johnmen (2004-11-19 10:47:00) [22]> вариант не самый приятный..
А что надо, приятность или скорость ?
:)
Barmutik (2004-11-19 10:44:00) [23]Спасибо .. просто мне достаточно часто нужен этот запрос...
И в этом IN может быть 2000-3000 элементов... просто если мне такой запрос надо делать раз в 5 секунд... то как-то перед этим запихивать их в базу... вариант не самый приятный.. а если несколько таких запросов одновременно...
Johnmen (2004-11-19 10:19:00) [24]Да. Индекс не поможет, т.к. идёт тупой перебор набора в IN.
Стандартное решение при большом наборе в IN - писать их во временную табл. и соединять её с основной.
О чём уже сказал Sergey13 ©.
Sergey13 (2004-11-19 10:14:00) [25]IN он такой. А как формируются эти 500 значений? Может их в какую нить табличку писать и подсовывать потом.