MySQL - Многопоточное обновление (без обновления потоков с тем же идентификатором), но с блокировкой - PullRequest
0 голосов
/ 17 мая 2018

У меня есть многопоточная Java-программа, которая выполняет операторы обновления в моей базе данных MySQL. Когда я использую потоки, я замираю, хотя никогда не обновляю одни и те же строки в любых двух потоках. Каждый раз, когда этот запрос выполняется, field_a отличается, так почему у меня возникают проблемы с блокировкой?

thread1: field_a - 'A'
thread2: field_a - 'B'
thread3: field_a - 'C'

Я выполняю запрос, подобный этому

 UPDATE table as t, 
            (
             SELECT field_a,
                   field_b,
                   TRUNCATE(AVG(Sumfield_c), 2) avgfield_c,
                   TRUNCATE(AVG(Sumfield_d), 2) avgfield_d
             FROM
              (SELECT field_a,
                      field_b,
                      DateString,
                      sum(field_c) Sumfield_c,
                      sum(field_d) Sumfield_d
               FROM table
               WHERE DateString > DATE_FORMAT(SUBDATE(CURDATE(), 22), '%Y%m%d') and field_a = ? and id <= ?
               GROUP BY field_a,
               field_b,
                        DateString) A
             GROUP BY field_a,
                     field_b
            ) as temp
             SET t.Avgfield_c = temp.avgfield_c, t.Avgfield_d = temp.avgfield_d WHERE t.field_a = temp.field_a and t.field_b = temp.field_b and t.id > ?;

1 Ответ

0 голосов
/ 18 мая 2018

После нескольких часов я заработал, создав новый индекс.

CREATE INDEX таблица newIndex ON (поле A, поле B);

Надеюсь, это поможет кому-нибудь в будущем выполнить аналогичный запрос с многопоточностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...