Форум: "Начинающим";
Текущий архив: 2013.11.10;
Скачать: [xml.tar.bz2];
Внизоптимизация 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c