我需要提高此更新查询的效率。
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 |
+----+-------------+--------------+-------+---------------+---------+---------+------+--------+------------------------------+
在课堂上,有人告诉我,一个好的查询至少应该有一个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)
答案 0 :(得分:0)
对于此查询:
UPDATE #table_name#
SET #column_name2# = 1
WHERE #column_name1# in (A list of data);
您需要#table_name#(#column_name1#)
上的索引。
请注意,要更新的记录数对性能有很大影响。如果“数据列表”实际上是一个子查询,那么其他方法可能对提高性能更有帮助。