Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
43 / 17 / 4
Регистрация: 22.02.2012
Сообщений: 327
MySQL

Как ускорить 25 UPDATE в 4 разные таблицы?

26.09.2015, 09:02. Показов 965. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый,
Нужно выполнить 25 обновлений в 4 разных таблицах.
Я сделал через executeBatch последовательные обновления, то есть
SQL
1
2
3
4
5
6
7
8
UPDATE t1 SET c1="1", c2="2" WHERE id="1";
UPDATE t1 SET c1="1", c2="2" WHERE id="2";
...
 
UPDATE t2 SET c1="1", c2="2", c3="3" WHERE id="1";
UPDATE t2 SET c1="1", c2="2", c3="3" WHERE id="2";
UPDATE t2 SET c1="1", c2="2", c3="3" WHERE id="3";
...
id - это праймари-кей.
В таблицах обновляется от 1 до 3 полей(int и varchar(20)). То есть сам объем обновляемых данных не велик.
Но из-за большого кол-ва UPDATE-процедур, вся работа с БД выполняется довольно медленно. 0.6-0.7 секунды.
Я решил переписать запросы так: сначала удалить с каждой таблице все нужные значения по id, а потом вставить их все с помощью одной процедуры INSERT, правда не уверен что это поможет.

Скажите, как можно ускорить данные запросы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.09.2015, 09:02
Ответы с готовыми решениями:

Update в цикле while, как ускорить
// ... SQLConn.Connected:=true; ATransaction:=TSQLTransaction.Create(nil); ...

UPDATE таблицы, как лучше реализовать?
Есть таблица такого вида (в ней храниться информация о товарах интернет магазина) |id|...{some fields}...|pic_small|pic_big| Также есть...

как заполнить столбец таблицы значениями из массива запросом UPDATE
Всем доброго времени суток. Ответьте плиз новичку для общего развития. Есть массив: => => => true => =>...

3
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.09.2015, 01:21
было бы неплохо, для начала, услышать порядок количества записей в таблицах, используются ли индексы для этих таблиц?
0
43 / 17 / 4
Регистрация: 22.02.2012
Сообщений: 327
27.09.2015, 08:23  [ТС]
Немного не понял вопроса, на всякий случай предоставлю таблицы.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
CREATE TABLE `battles` (
  `battleid` INT(11) NOT NULL,
  `status` INT(11) DEFAULT '0',
  `inviterId` INT(11) DEFAULT NULL,
  `guestId` INT(11) DEFAULT NULL,
  `forwardId` INT(11) DEFAULT NULL,
  `defenderId` INT(11) DEFAULT NULL,
  `justActionResult` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`battleid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
/* один запрос, обновляются status,forwardId,defenderId,justActionResult */
 
CREATE TABLE `heroes` (
  `heroId` INT(11) NOT NULL,
  `userId` mediumtext,
  `name` VARCHAR(30) NOT NULL,
  `photo` VARCHAR(20) NOT NULL,
  `maxHP` INT(11) NOT NULL,
  `currentHP` INT(11) NOT NULL,
  `heroClass` VARCHAR(20) DEFAULT NULL,
  `level` INT(11) NOT NULL,
  `exp` INT(11) NOT NULL,
  `needExp` INT(11) NOT NULL,
  `cash` INT(11) NOT NULL,
  `deckId` INT(11) DEFAULT NULL,
  `battlePowersId` INT(11) DEFAULT NULL,
  `armyId` INT(11) DEFAULT NULL,
  PRIMARY KEY (`heroId`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251
/* 2 запроса, обновляется  currentHP */
 
CREATE TABLE `powers` (
  `powersId` INT(11) NOT NULL,
  `element` VARCHAR(20) COLLATE utf8_unicode_ci NOT NULL,
  `current` INT(11) NOT NULL,
  `growth` INT(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
/*  8 запросов, обновляются current и growth */
 
CREATE TABLE `army_cards` (
  `cardId` INT(11) NOT NULL,
  `literal` VARCHAR(20) COLLATE utf8_unicode_ci NOT NULL,
  `armyId` INT(11) NOT NULL,
  `position` INT(11) NOT NULL,
  `damage` INT(11) NOT NULL,
  `currentHP` INT(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
/*  14 запросов, обновляется все. */
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.09.2015, 11:01
Я говорю о том, что, прежде чем пытаться оптимизировать код на Java, вы должны убедиться, что с базой у вас нет проблем. Для этого вы должны выполнить селекты из этих таблиц и посмотреть на время выполнения. Если количество записей в таблицах большое, то может имеет смысл посмотреть в сторону индексов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.09.2015, 11:01
Помогаю со студенческими работами здесь

Как добавить введенные данные в разные таблицы?
Добрый день! Подскажите, пожалуйста, как можно при работе с базой данных в Access сделать на VBA следующее. Я сделала 4 Text Box: -...

Как с Insert записать данные в разные таблицы БД
Вот у меня есть код для добавления записей в БД через TextBox. string connectionString =...

Как в один DataSet загрузить 2 разные таблицы
Здравствуйте, подскажите, почему такое не прокатывает: private MySqlConnection connection; private DataSet DS;...

Как программно изменить источник данных DataGridView или как вывести в DatagGridView разные таблицы
В студии в визуальном редакторе могу изменить источник. Но как изменить программно. Добавлено через 56 минут Разобрался сам, доделаю...

Как с тегом <select> отправлять данные в разные таблицы?
есть вот форма &lt;select&gt; &lt;option &gt;2010&lt;/option&gt; &lt;option&gt;2011&lt;/option&gt; &lt;option&gt;2012&lt;/option&gt; &lt;option&gt;2013&lt;/option&gt; &lt;/select&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru