Hint 语法使用

最近更新时间:2024-09-13 10:22:01

我的收藏
本文主要介绍在数据库代理上如何使用 Hint 语法。
使用 Hint 语法可以强制 SQL 请求在指定的实例上执行,Hint 的路由优先级最高,例如,Hint 不受一致性、事务的约束,使用前请合理评估业务场景是否需要。
注意:
使用 MySQL 命令行进行连接并使用 Hint 语句时,需要在命令中增加 -c 选项,否则 Hint 会被 MySQL 命令行工具过滤。
例如(通过内网建立连接时):为 mysql -h hostname -u username -p -c
通过数据库代理使用 Hint 语法时,数据库代理内核小版本大于等于 1.1.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,如下图所示。