Мне нужно сделать этот запрос обновления более эффективным.Как я могу сделать этот запрос UPDATE быстрее?
UPDATE #table_name# SET #column_name2# = 1 WHERE #column_name1# in (A list of data)
На данный момент требуется больше 2 минут, чтобы завершить работу, когда мой список данных достаточно велик. Вот результат объяснения этого запроса:
+----+-------------+--------------+-------+---------------+---------+---------+------+--------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+-------+---------------+---------+---------+------+--------+------------------------------+
| 1 | SIMPLE | #table_name# | index | NULL | PRIMARY | 38 | NULL | 763719 | Using where; Using temporary |
+----+-------------+--------------+-------+---------------+---------+---------+------+--------+------------------------------+
В классе, мне сказали, что OK запрос должен, по крайней мере, иметь тип range
и лучше достичь ref
. Прямо сейчас мой index
, который является вторым самым медленным, я думаю. Мне интересно, есть ли способ оптимизировать это.
Вот формат таблицы:
+--------------------+-------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+-------------+------+-----+-------------------+-------+
| #column_name1# | varchar(12) | NO | PRI | | |
| #column_name2# | tinyint(4) | NO | | 0 | |
| #column_name3# | tinyint(4) | NO | | 0 | |
| ENTRY_TIME | datetime | NO | | CURRENT_TIMESTAMP | |
+--------------------+-------------+------+-----+-------------------+-------+
Мой друг предложил мне, что с помощью exists
, а не in
пункт может помочь. Тем не менее, это выглядит как я не могу использовать exists
как exists (A list of data)
'Exists' хочет выбрать оператор. Это немного отличается от 'in'. Но может быть быстрее, чем 'in'. Но есть разница в обработке значений «null». для получения дополнительной информации: http://stackoverflow.com/questions/14190788/subqueries-with-exists-vs-in-mysql – Nebi
Вы обновляете 763719 записей? это будет медленно, независимо от того, что – e4c5
Вы говорите «когда мой список данных достаточно велик». На сколько огромный? –