我的表格上有breadcrumbs
CREATE TABLE `node` (
`id` int(10) unsigned NOT NULL,
`parent_id` int(10) unsigned DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`breadcrumbs` varchar(255) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
PRIMARY KEY (`id`),
KEY `ix_breadcrumbs` (`breadcrumbs`))
我正在运行更新查询:
update node
set breadcrumbs = concat(@newpath, substr(breadcrumbs, length(@oldpath)))
where breadcrumbs like @oldpath;
此查询对PRIMARY
执行完整索引扫描。
为什么我的选择/更新查询会执行完整的索引扫描而不是索引范围扫描,是否有办法强制进行索引范围扫描?
修改
显然,如果在MySql中使用变量,它会假定搜索字符串@oldpath
以通配符开头。将@oldpath
及其值替换为'000%'
解决了问题。
有没有办法继续使用变量,但仍然有效?