繁体   English   中英

如何使此UPDATE查询更快?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM