tidb点查询如何使hint生效

在tidb中默认点查询的执行计划使用hint不会生效,如何绕过使用点查询用hint也生效呢

在这里插
MySQL [test]> show create table users;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                        |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| users | CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `user_name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */,
  KEY `idx_name` (`user_name`),
  KEY `idx_id_name` (`id`,`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

SQL使用了hint执行计划还是点查询

MySQL [test]> explain select /*+  USE_INDEX(users,idx_id_name) */id,user_name from users  where id=100 ;
+-------------+---------+------+---------------+---------------+
| id          | estRows | task | access object | operator info |
+-------------+---------+------+---------------+---------------+
| Point_Get_1 | 1.00    | root | table:users   | handle:100    |
+-------------+---------+------+---------------+---------------+
1 row in set (0.00 sec)
使用cast函数或者其他函数让执行计划不是点查询然后再加hint就可以生效
MySQL [test]> explain select /*+  USE_INDEX(users,idx_id_name) */cast(id as char),cast(user_name  as char) from users  where id=100 ;
+--------------------------+---------+-----------+-----------------------------------------------+---------------------------------------------------------------------------------------------------+
| id                       | estRows | task      | access object                                 | operator info                                                                                     |
+--------------------------+---------+-----------+-----------------------------------------------+---------------------------------------------------------------------------------------------------+
| Projection_4             | 1.00    | root      |                                               | cast(test.users.id, var_string(5))->Column#3, cast(test.users.user_name, var_string(5))->Column#4 |
| └─IndexReader_6          | 1.00    | root      |                                               | index:IndexRangeScan_5                                                                            |
|   └─IndexRangeScan_5     | 1.00    | cop[tikv] | table:users, index:idx_id_name(id, user_name) | range:[100,100], keep order:false                                                                 |
+--------------------------+---------+-----------+-----------------------------------------------+---------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

入代码片
`
``

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值