CREATE GLOBAL BINDING 后 执行语句不生效

【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.5.1
【复现路径】CREATE GLOBAL BINDING
【遇到的问题:问题现象及影响】创建 binding 后 explain analyze 没有问题。但是直接执行语句没有起作用。

CREATE GLOBAL BINDING for  
SELECT
  COUNT(1)
FROM
  `rec_vaccination_record` `v`
  INNER JOIN `sys_vaccination_unit` `vu` ON (`v`.`vaccination_unit_id` = `vu`.`id`)
  INNER JOIN `sys_area_township` `t` ON (`vu`.`area_township_id` = `t`.`id`)
  AND (`t`.`is_deleted` = 0)
  INNER JOIN `sys_area_county` `co` ON (`t`.`parent_id` = `co`.`id`)
  AND (`co`.`is_deleted` = 0)
  INNER JOIN `sys_area_city` `ci` ON (`co`.`parent_id` = `ci`.`id`)
  AND (`ci`.`is_deleted` = 0)
WHERE
  (`ci`.`parent_id` = 15)
  AND (
    (
      (
        (
          `v`.`traceability_code` IS NULL
          OR `v`.`traceability_code` = ''
        )
        AND (`v`.`input_record_status` = 1)
      )
      AND (`v`.`creation_time` >= '2025-01-07 00:00:00')
    )
    AND (`v`.`creation_time` < '2025-02-07 00:00:00')
  )
  AND (`v`.`is_deleted` = 0)
USING 
SELECT
/*+ use_index(`v` `idx_vaccr_creation_time`)*/
  COUNT(1)
FROM
  `rec_vaccination_record` `v`
  INNER JOIN `sys_vaccination_unit` `vu` ON (`v`.`vaccination_unit_id` = `vu`.`id`)
  INNER JOIN `sys_area_township` `t` ON (`vu`.`area_township_id` = `t`.`id`)
  AND (`t`.`is_deleted` = 0)
  INNER JOIN `sys_area_county` `co` ON (`t`.`parent_id` = `co`.`id`)
  AND (`co`.`is_deleted` = 0)
  INNER JOIN `sys_area_city` `ci` ON (`co`.`parent_id` = `ci`.`id`)
  AND (`ci`.`is_deleted` = 0)
WHERE
  (`ci`.`parent_id` = 15)
  AND (
    (
      (
        (
          `v`.`traceability_code` IS NULL
          OR `v`.`traceability_code` = ''
        )
        AND (`v`.`input_record_status` = 1)
      )
      AND (`v`.`creation_time` >= '2025-01-07 00:00:00')
    )
    AND (`v`.`creation_time` < '2025-02-07 00:00:00')
  )
  AND (`v`.`is_deleted` = 0)

创建后执行 explain analyze

直接执行语句

执行 select @@last_plan_from_binding
返回0

1 个赞

SHOW GLOBAL BINDINGS;显示的是什么?
https://docs.pingcap.com/zh/tidb/stable/sql-plan-management#查看绑定

1 个赞


这是显示。

直接执行hint 是没有问题的。就是加到binding中就没有效果

1 个赞

我能想到的可能性是有些GUI,会在语句后面添加limit 控制返回的结果大小。

会不会执行的时候GUI加了limit导致了执行计划没有正确绑定?

看看慢查询里面的对应sql语句是否带有limit。

2 个赞

确实慢查询里面的带 limit

1 个赞

我又增加了一个绑定 limit 的 可以了

1 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。