Главная страница
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.009 c
15-1369427402
Юрий
2013-05-25 00:30
2013.11.10
С днем рождения ! 25 мая 2013 суббота


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


2-1360233890
vlad
2013-02-07 14:44
2013.11.10
Открытие файла своей программой.


15-1369324793
Rouse_
2013-05-23 19:59
2013.11.10
Ничего так замиксовали :)


1-1317971415
denkop
2011-10-07 11:10
2013.11.10
Манифест и прозрачность TLabel