Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.11.10;
Скачать: CL | DM;

Вниз

оптимизация sql-запросов с IN   Найти похожие ветки 

 
Camaro   (2013-02-08 11:07) [0]

Есть программа для работы с договорами. В ней реализован поиск договоров. ID найденных договоров сохраняются в список, чтобы в дальнейшем можно было выполнить какие-либо действия над найденными договорами. Например, нужно установить найденным договорам статус - расторгнут, это список передается диалоговому окну изменения статуса, где ID из списка подставляются в SQL запрос, который меняет статус - ... WHERE ID IN %s .... Таких ID может быть хоть миллион. Запрос получается такой UPDATE item SET ... WHERE ID IN (1, 2, 3, 4, 5, 6, 7, 8, 9, ... 1000000) ... Хорошо ли делать такой IN?


 
Ega23 ©   (2013-02-08 11:22) [1]

Внезапно наткнулся в FireBird, что больше полутора тысяч значений в IN не влезало, ошибка gds32.
Заведи временную таблицу, вставь в неё эти ID и передавай имя таблицы.


 
O'ShinW ©   (2013-02-08 11:36) [2]

Аналогично было
> что больше полутора тысяч значений в IN не влезало

и на MSSQL, и на Oracle
при генерации запросов


 
Anatoly Podgoretsky ©   (2013-02-08 11:44) [3]


> Хорошо ли делать такой IN?

Плохо


 
Camaro   (2013-02-08 12:08) [4]


> Заведи временную таблицу, вставь в неё эти ID и передавай
> имя таблицы.


Спасибо, так и сделаю.


 
Camaro   (2013-02-08 14:12) [5]


> Заведи временную таблицу, вставь в неё эти ID и передавай
> имя таблицы.


чет, не пойму, как в темповую таблицу единоразово вставить все id из списка


 
Inovet ©   (2013-02-08 14:15) [6]

> [5] Camaro   (08.02.13 14:12)
> вставить все id из списка

INSERT INTO TMP SELECT ID FROM TBL


 
Ega23 ©   (2013-02-08 14:16) [7]


> чет, не пойму, как в темповую таблицу единоразово вставить
> все id из списка

Зачем из списка-то?

> Есть программа для работы с договорами. В ней реализован
> поиск договоров. ID найденных договоров сохраняются в список

Это на клиенте или на сервере происходит?


 
Camaro   (2013-02-08 14:24) [8]


> Ega23 ©


Программа в трехзвенке. Все операции с БД выполняюся на сервере приложений. Клиент по сокетам отдает данные серверу, в моем случае это id найденных договоров. Их нужно грамотно подставить в запрос.


 
Inovet ©   (2013-02-08 14:26) [9]

> [8] Camaro   (08.02.13 14:24)
> Их нужно грамотно подставить в запрос

Тогда параметром и в цикле вызывать INSERT. Prepare не забудь до цикла вызвать.


 
знайка   (2013-02-08 15:03) [10]

про субд ни слова...


 
Михаил   (2013-02-09 11:55) [11]

Парси список по 100 ID-шников и передавай по очереди.


 
Inovet ©   (2013-02-09 13:54) [12]

> [11] Михаил   (09.02.13 11:55)

Чем 100 лучше 200, или 1, или все?


 
Amoeba_   (2013-02-10 03:25) [13]


> Запрос получается такой UPDATE item SET ... WHERE ID IN
> (1, 2, 3, 4, 5, 6, 7, 8, 9, ... 1000000)

Жесть!



Страницы: 1 вся ветка

Текущий архив: 2013.11.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1359427812
Abcdef123
2013-01-29 06:50
2013.11.10
Ошибки компиляции при переводе проекта в XE3.


15-1369703482
Сергей
2013-05-28 05:11
2013.11.10
Нормализованое число


15-1369684251
ProgRAMmer Dimonych
2013-05-27 23:50
2013.11.10
TEdit, Win32 EDIT control и Alt+13


6-1269002967
Domkrat
2010-03-19 15:49
2013.11.10
Login на Google


15-1369555506
Polevi
2013-05-26 12:05
2013.11.10
Нужен java developer