02.06.2003, 08:27 | #1 |
Участник
|
Как ускорить изменение большого количества записей?
Поставили задачу помечать с возможностью фильтрации таких контрагентов, по которым можно провести операцию сопоставления оплаты задолжености.
Сперва решили сделать дисплейный метод на таблицы: контрагентов видно, но нельзя их отфильтровать. Тогда добавили поле (типа NoYes) и в формах VendTable/CustTable сделали метод, который обновлял это поле средсвами Аксапты... ПРОБЛЕМА во времени работы. Решили обмануть систему и переписали метод так: void Sopostav() { Connection C = new Connection(); Statement stmt = c.createStatement(); str ss = " and DataAreaId = \'" + curExt() + "\'"; str SQL0 = "UPDATE VENDTABLE SET Na_Sopostav = 0 where Na_Sopostav = 1" + ss; str SQL = "UPDATE VENDTABLE SET Na_Sopostav = 1 WHERE accountnum = ANY (" + "SELECT accountnum FROM VENDTRANSOPEN WHERE amountmst > 0 AND accountnum = ANY (" + "SELECT accountnum FROM VENDTRANSOPEN WHERE amountmst < 0" + ss + ")" + ss + ")" + ss; ; stmt.executeUpdate(SQL0); stmt.executeUpdate(SQL); } Но нехочется обманывать систему, что можете посоветовать. |
|
02.06.2003, 11:35 | #2 |
Участник
|
Может поставить задачу по другому? Сделать отдельную формочку, где выводятся контрагенты, по которым можно провести сопоставление.
|
|
02.06.2003, 11:46 | #3 |
Участник
|
В Аксапте 3.0 появилось групповое изменение записей UPDATE_RECORDSET, на подобии операции DELETE_FROM в 2.5.
А нельзя например запускать в пакетном режиме, раз в 30 минут .. эту процедуру на сервере? Сколько у вас контрагентов в таблице? |
|
02.06.2003, 12:16 | #4 |
Участник
|
Re: Как ускорить изменение большого количества записей?
Цитата:
Изначально опубликовано edd
ПРОБЛЕМА во времени работы. В вопросе должно быть сказано о планах запросов, статистике на сервере, загруженности сети, параметрах сервера и клиента. Пока же можно сказать, что вы редкостные извращенцы, если для нормальной Аксаптовской задачи вам пришлось использовать COM-объект Connection. Совет пока один - отследите чем занимается на сервере ваш запрос. Вполне возможно, что где то прячется банальный table scan, поскольку индекса по amountmst, скорее всего, нет. |
|
03.06.2003, 10:23 | #5 |
Участник
|
Вопрос к mazzy, если они извращенцы для чего они в Аксапте оставили Connection для извращенцов, может те извращенцы, кто не дописал нормального группового update. Если пойти дальше и нормальной документации, на объекты приложения.
|
|
03.06.2003, 11:04 | #6 |
Участник
|
Решил я оставить этот "некорректный" метод, поскольку вижу ряд приемуществ от его использования:
1. Скорость, в разы (возможно десятки раз). 2. Не ставится дата, время и автор модификации, что В ДАННОМ случае есть ПЛЮС. |
|
03.06.2003, 12:33 | #7 |
Moderator
|
Цитата:
В Аксапте 3.0 появилось групповое изменение записей UPDATE_RECORDSET, на подобии операции DELETE_FROM в 2.5.
|
|
03.06.2003, 13:04 | #8 |
Участник
|
Андре, извини а ты не мог бы опубликовать SQL запросы которые генерирует операция update_recordset, очень интересно про временные таблицы
|
|
03.06.2003, 13:25 | #9 |
Moderator
|
Про update_recordset честно говоря уже не помню, но вот про insert_recordset:
Делаем job: PHP код:
1. SELECT ... INTO <временная таблица> 2. INSERT INTO INVENT SELECT FROM <временная таблица> 3. DROP <временная таблица> Думаю, что с Oracle ситуация аналогичная. |
|
03.06.2003, 14:09 | #10 |
Участник
|
Спасиб, будем знать
Интересно для чего они так сделали? |
|
03.06.2003, 14:15 | #11 |
Модератор
|
Цитата:
Про update_recordset честно говоря уже не помню
|
|
03.06.2003, 15:37 | #12 |
Участник
|
А что делать, если верия 2.5?
|
|
03.06.2003, 15:59 | #13 |
Moderator
|
Может я несколько не врубаюсь в тему, но зачем вообще было добавлять новые поля в custTable/VendTable? Не проще ли было заджойнить эти таблицы с custTrans/vendTrans с помощю exists join, по условию AmountMST<>SettleAmountMST...
Правда - на оркале exists join не очень торопливо обрабатывается, но там это лечится недефолтными настройками сервера... |
|
03.06.2003, 16:04 | #14 |
Участник
|
Цитата:
Изначально опубликовано edd
Решил я оставить этот "некорректный" метод, поскольку вижу ряд приемуществ от его использования: 1. Скорость, в разы (возможно десятки раз). 2. Не ставится дата, время и автор модификации, что В ДАННОМ случае есть ПЛЮС. |
|
|
|