网站首页 > 教程文章 正文
注意优化器需要mysql客户端5.7.7版本以上支持,针对之前的版本则需使用如下命令:
mysql -h 127.0.0.1 -P 4000 -uroot --comments
--查询MySQL 客户端版本:
#mysql --version
mysql Ver 8.0.12 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
或者:
# mysql --version
mysql Ver 14.14 Distrib 5.7.22-22, for Linux (x86_64) using 6.2
Optimizer Hint
TiDB 在 MySQL 的 Optimizer Hint 语法上,增加了一些 TiDB 专有的 Hint 语法, 使用这些 Hint 的时候,TiDB 优化器会尽量使用指定的算法,在某些场景下会比默认算法更优。TiDB使用的hint语法和Oracle的语法类似。
TiDB支持的连接类型包括:
sort merge join
nested loop join
hash join .
示例如下:
TIDB_SMJ(t1, t2)
SELECT /*+ TIDB_SMJ(t1, t2) */ * from t1,t2 where t1.id = t2.id
提示优化器使用 Sort Merge Join 算法,这个算法通常会占用更少的内存,但执行时间会更久。 当数据量太大,或系统内存不足时,建议尝试使用。
TIDB_INLJ(t1, t2)
SELECT /*+ TIDB_INLJ(t1, t2) */ * from t1,t2 where t1.id = t2.id
提示优化器使用 Index Nested Loop Join 算法,这个算法可能会在某些场景更快,消耗更少系统资源,有的场景会更慢,消耗更多系统资源。对于外表经过 WHERE 条件过滤后结果集较小(小于 1 万行)的场景,可以尝试使用。TIDB_INLJ()中的参数是建立查询计划时,驱动表(外表)的候选表。即TIDB_INLJ(t1)只会考虑使用t1作为驱动表构建查询计划。
TIDB_HJ(t1, t2)
SELECT /*+ TIDB_HJ(t1, t2) */ * from t1,t2 where t1.id = t2.id 提示优化器使用 Hash Join 算法,这个算法多线程并发执行,执行速度较快,但会消耗较多内存。
_tidb_rowid
这个是一个 TiDB 的隐藏列,代表隐式的 ROW ID 的列名,只存在于 PK 非整数或没有 PK 的表上,可以进行增减改查的操作。
SELECT 语句示例:SELECT *, _tidb_rowid from t;
INSERT 语句示例:INSERT t (c, _tidb_rowid) VALUES (1, 1);
UPDATE 语句示例:UPDATE t SET c = c + 1 WHERE _tidb_rowid = 1;
DELETE 语句示例:DELETE FROM t WHERE _tidb_rowid = 1;
SHARD_ROW_ID_BITS
这个 TABLE OPTION 是用来设置隐式 _tidb_rowid 的分片数量的 bit 位数。
对于 PK 非整数或没有 PK 的表,TiDB 会使用一个隐式的自增 rowid,大量 INSERT 时会把数据集中写入单个 region,造成写入热点。 通过设置 SHARD_ROW_ID_BITS 可以把 rowid 打散写入多个不同的 region,缓解写入热点问题。 但是设置的过大会造成 RPC 请求数放大,增加 CPU 和网络开销。
SHARD_ROW_ID_BITS = 4 代表 16 个分片, SHARD_ROW_ID_BITS = 6 表示 64 个分片,SHARD_ROW_ID_BITS = 0 就是默认值 1 个分片 。
CREATE TABLE 语句示例: CREATE TABLE t (c int) SHARD_ROW_ID_BITS = 4;
ALTER TABLE 语句示例: ALTER TABLE t SHARD_ROW_ID_BITS = 4;
猜你喜欢
- 2025-04-06 超级详细的zabbix环境搭建和测试(看我的教程,大神你也可以)
- 2025-04-06 oracle中merge into语句详解(oracle的merge语句)
- 2025-04-06 SQL——UPDATE:更新数据(更新sql语句)
- 2025-04-06 什么是 SQL 事务,如何创建 SQL 事务
- 2025-04-06 Win11学院:如何修复Windows Update服务丢失问题
- 2025-04-06 20000 字干货笔记,一天搞定 MySQL
- 2025-04-06 数据库:Mysql中“select ... for update”排他锁分析
- 2025-04-06 【Mybatis实战第4天】三步搞定 Mybatis更新(update)操作
- 2025-04-06 select...for update到底是加了行锁,还是表锁?
- 2025-04-06 超详细的Oracle19c修改数据库用户名教程
- 最近发表
-
- Nacos最全详解(8大架构原理图解)(nacos原理讲解)
- 干货!微服务全量升级JDK17,踩坑笔记整理
- springboot集成nacos配置中心(springcloud配置nacos集群)
- Nacos快速入门指南(nacos 使用)
- Nacos读取配置文件的顺序(nacos 配置文件)
- 本地启动若依项目nacos报错:Server check fail, please check server
- 阿里Nacos惊爆安全漏洞,火速升级!(附修复建议)
- Nacos简介—1.Nacos使用简介(nacos是干啥的)
- Nacos简介—4.Nacos架构和原理一(nacos原理讲解)
- Nacos架构最全详解(图文全面总结)
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)