Hint 语法使用

最近更新时间:2024-08-02 16:34:01

我的收藏
本文主要介绍在数据库代理上如何使用 Hint 语法。
使用 Hint 语法可以强制 SQL 请求在指定的实例上执行,Hint 的路由优先级最高,Hint 不受一致性、事务的约束,使用前请合理评估业务场景是否需要。
注意:
使用 TDSQL-C MySQL 版命令行进行连接并使用 Hint 语句时,需要在命令中增加 -c 选项,否则 Hint 会被命令行工具过滤。
例如(通过内网建立连接时):为 mysql -h hostname -u username -p -c
通过数据库代理使用 Hint 语法时,数据库代理版本大于等于1.3.3的版本,支持 prepare。
目前支持三种 Hint:
指定到读写实例执行:
-- Hint语句
/* to master */
/*FORCE_MASTER*/
-- 示例
-- 强制在读写实例上执行查询
SELECT /* to master */ * FROM users WHERE user_id = 1;

-- 强制在读写实例上执行更新
UPDATE /* FOCE_MASTER */ orders SET status = 'shipped' WHERE order_id = 1001;
指定到只读实例执行:
-- Hint语句
/* to slave */
/*FORCE_SLAVE*/
-- 示例
-- 强制在只读实例执行查询
SELECT /* to slave */ * FROM products WHERE category = 'electronics';

-- 强制在只读实例执行计数查询
SELECT /* FORCE_SLAVE */ COUNT(*) FROM transactions WHERE status = 'completed';
指定某个具体实例执行:
-- Hint语句
/* to server server_name */
-- 示例
-- 强制在特定实例 test_ro_1 上执行查询
SELECT /* to server test_ro_1 */ * FROM inventory WHERE product_id = 2002;
说明:
上述语句中的 server_name 为实例 ID,您可在集群详情页面右侧实例信息内(页签视图模式),获取目标实例的实例 ID,如下图所示。