|
|
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
Имеется массив на клиенте 50 тыс значений, со временем может увеличиваться. скажите как можно проапдейтить таблицу на сервере? если делать через цикл с клиента Для Индекс = 0 По Мас.Количество() - 1 Цикл objComm.CommandText = "UPDATE dirty_data SET dirty_data.pred_dostov="+?(ТипЗнч(Мас[Индекс].ДостоверныПред)=Тип("Null"),null,Число(Мас[Индекс].ДостоверныПред))+",dirty_data.sled_dostov="+?(ТипЗнч(Мас[Индекс].ДостоверныСлед)=Тип("Null"),null,Число(Мас[Индекс].ДостоверныСлед))+",dirty_data.nalich_lic_sch="+?(ТипЗнч(Мас[Индекс].ЛицевойСчетСуществует)=Тип("Null"),null,Число(Мас[Индекс].ЛицевойСчетСуществует))+",dirty_data.pred_pokaz="+?(ТипЗнч(Мас[Индекс].ПоказанияПред)=Тип("Null"),null,(?(Мас[Индекс].ПоказанияПред=0,0,Формат(Окр(Мас[Индекс].ПоказанияПред),"ЧГ=0"))))+",dirty_data.sled_pokaz="+?(ТипЗнч(Мас[Индекс].ПоказанияСлед)=Тип("Null"),null,(?(Мас[Индекс].ПоказанияСлед=0,0,Формат(Окр(Мас[Индекс].ПоказанияСлед),"ЧГ=0"))))+",dirty_data.date_update=now() |WHERE dirty_data.lic_sch="+""""+Мас[Индекс].ЛицевойСчет+""""+" and dirty_data.year_mon_record="+""""+Мас[Индекс].Дата+""""+";"; objComm.Execute(); КонецЦикла; это очень долго... т е в цикле выполняется 50 тыс запросов на каждый элемент массива как можно по другому реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2016, 15:26 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
есть возможность с клиента вызывать хранимую процедуру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2016, 16:25 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
olegon7, Это какая СУБД ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2016, 21:38 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
miksoft, Mysql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2016, 08:40 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
olegon7miksoft, MysqlНе, вот это - "ТипЗнч(Мас[Индекс].ДостоверныПред" - точно не MySQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2016, 09:31 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
miksoftolegon7miksoft, MysqlНе, вот это - "ТипЗнч(Мас[Индекс].ДостоверныПред" - точно не MySQL. Это внутренний язык 1с предприятие проверяет на тип значения элементы массива (Проверка)чтобы потом вставить нужное значние в текст запроса конкретно по ДостоверныПред в основном это булево значения , но могут встречаться и тип значения null Например если null то пишется null в противном случае преобразовывается в число(Истина -1 , ложь-0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2016, 10:07 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
olegon7Это внутренний язык 1с предприятиеНу нам-то откуда это знать? Показывайте конечный SQL-запрос, а не код, который его собирает. Вообще есть несколько направлений оптимизации: 0) Убедиться, что все эти запросы нужны. Возможно, какой-то их части можно было бы избежать. Но для этого нужно знать архитектуру БД и алгоритмы программы, это, как правило, не форумный формат. 1) Попытаться ускориться существующие запросы. По крайней мере, убедиться что созданы и используются все нужные индексы. 2) Переписать много запросов на один/несколько. Например, вставить новые значения во временную таблицу, а потом проапдейтить целевую таблицу одним запросом на основе временной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2016, 10:19 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
miksoftolegon7Это внутренний язык 1с предприятиеНу нам-то откуда это знать? Показывайте конечный SQL-запрос, а не код, который его собирает. Вообще есть несколько направлений оптимизации: 0) Убедиться, что все эти запросы нужны. Возможно, какой-то их части можно было бы избежать. Но для этого нужно знать архитектуру БД и алгоритмы программы, это, как правило, не форумный формат. 1) Попытаться ускориться существующие запросы. По крайней мере, убедиться что созданы и используются все нужные индексы. 2) Переписать много запросов на один/несколько. Например, вставить новые значения во временную таблицу, а потом проапдейтить целевую таблицу одним запросом на основе временной. Скажите как быстрее исходя из вашего опыта 1 вариант В цикле строить запросы по апдейту нужной таблица элементами массива получится 50 тыс запросов 2 вариант создать временную таблицу, проинсертить туда весь массив , опять же в цикле(50 ТЫС ЗАПРОСОВ). А потом апдейтить нужную таблицу из временной? Еще вопрос по типам, я так понимаю в mysql нет bool типа вместо него можно использовать int или как ? int может быть null? я к тому какую структуру сделать для временной таблицы в mysql , делать ли ключи уникальные? апдейтиться будет ПОЛЯ pred_dostovern,sled_dostovern,nalich_lic_sch,pred_pokaz,sled_pokaz по условию lic_sch.dirty_data=lic_sch.temp and yaer_mon_record.dirty_data=yaer_mon_record.TEMP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2016, 11:00 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
olegon7Скажите как быстрее исходя из вашего опыта 1 вариант В цикле строить запросы по апдейту нужной таблица элементами массива получится 50 тыс запросов 2 вариант создать временную таблицу, проинсертить туда весь массив , опять же в цикле(50 ТЫС ЗАПРОСОВ). А потом апдейтить нужную таблицу из временной?Сходу не скажу, надо пробовать. Но второй вариант привлекательнее тем, что на значительно меньшее время блокирует записи в целевой таблице. Актуально если с этой же таблицей работают другие сессии. olegon7в mysql нет bool типаНет. olegon7вместо него можно использовать int или как ?Традиционно используют TINYINT, а иногда CHAR(1), еще реже всякие, на мой взгляд, извращения типа ENUM или VARCHAR (со значениями 'Да'/'Нет' и т.п.). olegon7int может быть null?Да, если не было указано явно, что это поле NOT NULL. olegon7я к тому какую структуру сделать для временной таблицы в mysql , делать ли ключи уникальные?По идее, уникальным или первичным ключом долден быть набор полей, который в исходном апдейте написан в секции WHERE. Но это зависит от логики вашей системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2016, 11:48 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
miksoft, я так понимаю можно использовать TINYINT (1) оно тоже быть nullом? так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2016, 12:46 |
|
||
|
Как оптимальнее проапдейтить таблицу на сервере?
|
|||
|---|---|---|---|
|
#18+
olegon7я так понимаю можно использовать TINYINT (1) оно тоже быть nullом?Конечно. Поле любого типа может быть NULL, если обратное не указано в определении конкретного этого поля в таблице. Кстати, на цифру 1 в скобках не полагайтесь. Она не помешает вставить число 100 в это поле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2016, 13:25 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39228554&tid=1831847]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 517ms |

| 0 / 0 |
