Я оптимизирую запрос на обновление:
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 | |
+----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
Мне интересно, смогу ли я оптимизировать запрос UPDATE, выбрав тип индекса, который можно использовать с WHERE rgt >= @superRgt
?