[英]How can I make this UPDATE query faster?
我需要使此更新查询更有效。
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
,这是我认为第二慢的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)
对于此查询:
UPDATE #table_name#
SET #column_name2# = 1
WHERE #column_name1# in (A list of data);
您需要在#table_name#(#column_name1#)
上#table_name#(#column_name1#)
索引。
请注意,要更新的记录数对性能有很大影响。 如果“数据列表”确实是子查询,则其他方法可能对改善性能更有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.