CREATE global BINDING失败

有个绑定执行计划的sql,请教下我这么写有什么问题?

CREATE global BINDING FOR SELECT LOW_PRIORITY SQL_NO_CACHE
id
FROM
soa_vehicle.t_track_ride_detail
WHERE
id >= ?
AND id < ?
AND create_time < FROM_UNIXTIME( ? ) ORDER BY id ASC LIMIT 500
USING
SELECT /+ use_index(soa_vehicle.t_track_ride_detail, feng)/
LOW_PRIORITY SQL_NO_CACHE id
FROM soa_vehicle.t_track_ride_detail
WHERE id >= ? AND id < ?
AND create_time < FROM_UNIXTIME(?)
ORDER BY id ASC LIMIT 500;

SELECT /+ use_index(soa_vehicle.t_track_ride_detail, feng) /
LOW_PRIORITY SQL_NO_CACHE id
FROM soa_vehicle .t_track_ride_detail
WHERE id >= ? AND id < ?
AND create_time < FROM_UNIXTIME(?)
ORDER BY id ASC LIMIT 500;
这个sql对吗,能正常执行?

1 个赞

我也好奇,试了一下,还真可以。

把LOW_PRIORITY SQL_NO_CACHE这2个关键字去掉是可以的


看着是bind语句不识别LOW_PRIORITY或SQL_NO_CACHE关键词,你去了能绑定上,但是实际sql是带这两个关键词的,还是走不上索引

感觉是bug。

select /*+use_index(test.t1, i_ct)*/ LOW_PRIORITY SQL_NO_CACHE id

这样可以,

但是绑定的时候就是会报错。提示和楼主一样的。

1 个赞

ttl用的人少啊,感觉问题挺多的

select * from t t1 use index(idx1); 可以试试这种 hint 的方式

2 个赞

你这种把hint写在结尾的方法无效的

1 个赞

你是指 binding 无效? 我在 7.5 的版本测试过应该是可以的

1 个赞

这个靠谱,这样真的可以。

CREATE global BINDING FOR SELECT LOW_PRIORITY SQL_NO_CACHE
id
FROM
test.t1
WHERE
id >= ?
AND id < ?
AND create_time < FROM_UNIXTIME( ? ) ORDER BY id ASC LIMIT 500
USING
SELECT LOW_PRIORITY SQL_NO_CACHE id
FROM test.t1 use index(i_ct)
WHERE id >= ? AND id < ?
AND create_time < FROM_UNIXTIME(?)
ORDER BY id ASC LIMIT 500;

这样能绑上。

1 个赞

SQL_NO_CACHE 在 TiDB 中已被移除(v4.0+)以后的版本都不在支持,如果你仍然保留它,就会导致语法错误。

可以了,牛掰!

别明目张胆的胡说八道