Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1369476584
Новичок
2013-05-25 14:09
2013.11.10
Язык программирования для ИИ.


15-1369649977
О-Сознание
2013-05-27 14:19
2013.11.10
Мусор от DoubleBuffered


15-1369427402
Юрий
2013-05-25 00:30
2013.11.10
С днем рождения ! 25 мая 2013 суббота


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


6-1270034814
jetbird
2010-03-31 15:26
2013.11.10
Кодировка вложений





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский