如何强制MySql使用索引范围扫描而不是全索引扫描?

时间:2015-03-03 17:55:56

标签: mysql

我的表格上有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%'解决了问题。

有没有办法继续使用变量,但仍然有效?

0 个答案:

没有答案