powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как оптимальнее проапдейтить таблицу на сервере?
11 сообщений из 11, страница 1 из 1
Как оптимальнее проапдейтить таблицу на сервере?
    #39228405
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется массив на клиенте 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 тыс запросов на каждый элемент массива

как можно по другому реализовать?
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228424
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть возможность с клиента вызывать хранимую процедуру
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228482
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7,

Это какая СУБД ?
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228538
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Mysql
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228544
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7miksoft,

MysqlНе, вот это - "ТипЗнч(Мас[Индекс].ДостоверныПред" - точно не MySQL.
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228554
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftolegon7miksoft,

MysqlНе, вот это - "ТипЗнч(Мас[Индекс].ДостоверныПред" - точно не MySQL.

Это внутренний язык 1с предприятие проверяет на тип значения элементы массива (Проверка)чтобы потом вставить нужное значние в текст запроса

конкретно по ДостоверныПред в основном это булево значения , но могут встречаться и тип значения null

Например если null то пишется null в противном случае преобразовывается в число(Истина -1 , ложь-0)
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228556
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7Это внутренний язык 1с предприятиеНу нам-то откуда это знать?
Показывайте конечный SQL-запрос, а не код, который его собирает.

Вообще есть несколько направлений оптимизации:
0) Убедиться, что все эти запросы нужны. Возможно, какой-то их части можно было бы избежать. Но для этого нужно знать архитектуру БД и алгоритмы программы, это, как правило, не форумный формат.
1) Попытаться ускориться существующие запросы. По крайней мере, убедиться что созданы и используются все нужные индексы.
2) Переписать много запросов на один/несколько. Например, вставить новые значения во временную таблицу, а потом проапдейтить целевую таблицу одним запросом на основе временной.
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228570
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228586
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7Скажите как быстрее исходя из вашего опыта
1 вариант В цикле строить запросы по апдейту нужной таблица элементами массива
получится 50 тыс запросов
2 вариант создать временную таблицу, проинсертить туда весь массив , опять же в цикле(50 ТЫС ЗАПРОСОВ). А потом апдейтить нужную таблицу из временной?Сходу не скажу, надо пробовать.
Но второй вариант привлекательнее тем, что на значительно меньшее время блокирует записи в целевой таблице. Актуально если с этой же таблицей работают другие сессии.
olegon7в mysql нет bool типаНет.
olegon7вместо него можно использовать int или как ?Традиционно используют TINYINT, а иногда CHAR(1), еще реже всякие, на мой взгляд, извращения типа ENUM или VARCHAR (со значениями 'Да'/'Нет' и т.п.).
olegon7int может быть null?Да, если не было указано явно, что это поле NOT NULL.
olegon7я к тому какую структуру сделать для временной таблицы в mysql , делать ли ключи уникальные?По идее, уникальным или первичным ключом долден быть набор полей, который в исходном апдейте написан в секции WHERE. Но это зависит от логики вашей системы.
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228599
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

я так понимаю можно использовать TINYINT (1) оно тоже быть nullом?
так?
...
Рейтинг: 0 / 0
Как оптимальнее проапдейтить таблицу на сервере?
    #39228604
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7я так понимаю можно использовать TINYINT (1) оно тоже быть nullом?Конечно. Поле любого типа может быть NULL, если обратное не указано в определении конкретного этого поля в таблице.

Кстати, на цифру 1 в скобках не полагайтесь. Она не помешает вставить число 100 в это поле.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как оптимальнее проапдейтить таблицу на сервере?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]