【发布时间】:2011-06-06 16:07:15
【问题描述】:
我正在优化更新查询:
UPDATE projects SET rgt = rgt + 2 WHERE rgt >= @superRgt;
该表有很多行(~63000),查询运行缓慢。当我
explain SELECT * FROM projects WHERE rgt >= @superRgt;
我得到这个结果:
+----+-------------+----------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | projects | ALL | rgt | NULL | NULL | NULL | 69971 | Using where |
+----+-------------+----------+------+---------------+------+---------+------+-------+-------------+
rgt键定义为:
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| projects | 1 | rgt | 1 | rgt | A | 72770 | NULL | NULL | | BTREE | |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
我想知道是否可以通过选择可与WHERE rgt >= @superRgt 一起使用的索引类型来优化 UPDATE 查询?
【问题讨论】:
-
您的查询实际更新了 63k 行中的多少?
标签: mysql optimization indexing innodb