当前位置:网站首页>TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践
TiKV & TiFlash 加速复杂业务查询丨TiFlash 应用实践
2022-08-03 11:37:00 【InfoQ】
背景
- 传统的关系型数据库无法通过加索引来优化加速查询,业务无法正常开展;
- 列存数据库需要把筛选相关数据放到列数据库,并且需要做好数据实时同步;
- 无法从数据库层面做好数据的读取,往往需要从列数据库读取数据后再到关系数据库进行数据合并后输出,性能不容乐观。
TiKV 行存 与 TiFlash 列存混合使用

混用原理
- TiDB 的行列混合并不是传统设计上的行存列存二选一,而是 TiDB 可以在同一张表同时拥有行存和列存,且两者永远保持数据强一致(而非最终一致)。
- 多表查询分别使用不同的引擎 TiKV 或 TiFlash。
- TiFlash 支持 MPP 模式的查询执行,即在计算中引入跨节点的数据交换(data shuffle 过程)。
混用优化

标签系统高级筛选

Read from TiKV
SELECT
/*+ READ_FROM_STORAGE(tikv[b], tikv[c],tikv[d]) */
a.*,
b.CUST_NAME,b.CERT_TYPE,b.CERT_NUM,b.CUST_TYPE,b.SEX,b.AGE,b.BIRTH_DT,
c.ORG_ID,c.ORG_NAME,
d.ASSET,d.ASSET_MON_AVG
FROM
(
SELECT /*+ READ_FROM_STORAGE(tikv[m],tikv[n]) */
m.cust_id
FROM
m_cust_label m
RIGHT JOIN m_cust_org n ON m.CUST_ID = n.CUST_ID
WHERE
m.cat1 IN ( 516, 710, 230,3301 )
AND n.ORG_ID IN ( '133','8716', '7162') ORDER BY n.cust_id ASC LIMIT 100
) a
LEFT JOIN m_cust_main b ON a.cust_id = b.cust_id
LEFT JOIN m_cust_org c ON a.cust_id = c.cust_id
LEFT JOIN m_cust_data d ON a.cust_id = d.cust_id ;
Read From TiKV & TiFlash
SELECT
/*+ READ_FROM_STORAGE(tikv[b], tikv[c],tikv[d]) */
a.*,
b.CUST_NAME,b.CERT_TYPE,b.CERT_NUM,b.CUST_TYPE,b.SEX,b.AGE,b.BIRTH_DT,
c.ORG_ID,c.ORG_NAME,
d.ASSET,d.ASSET_MON_AVG
FROM
(
SELECT /*+ READ_FROM_STORAGE(tiflash[m],tikv[n]) */
m.cust_id
FROM
m_cust_label m
RIGHT JOIN m_cust_org n ON m.CUST_ID = n.CUST_ID
WHERE
m.cat1 IN ( 516, 710, 230,3301 )
AND n.ORG_ID IN ( '133','8716', '7162') ORDER BY n.cust_id ASC LIMIT 100
) a
LEFT JOIN m_cust_main b ON a.cust_id = b.cust_id
LEFT JOIN m_cust_org c ON a.cust_id = c.cust_id
LEFT JOIN m_cust_data d ON a.cust_id = d.cust_id
TiFlash & MPP
tidb_allow_mpptidb_enforce_mppset @@session.tidb_allow_mpp=1;
set @@session.tidb_enforce_mpp=1;
SELECT
/*+ READ_FROM_STORAGE(tikv[b], tikv[c],tikv[d]) */
a.*,
b.CUST_NAME,b.CERT_TYPE,b.CERT_NUM,b.CUST_TYPE,b.SEX,b.AGE,b.BIRTH_DT,
c.ORG_ID,c.ORG_NAME,
d.ASSET,d.ASSET_MON_AVG
FROM
(
SELECT /*+ READ_FROM_STORAGE(tiflash[m],tiflash[n]) */
m.cust_id
FROM
m_cust_label m
RIGHT JOIN m_cust_org n ON m.CUST_ID = n.CUST_ID
WHERE
m.cat1 IN ( 516, 710, 230,3301 )
AND n.ORG_ID IN ( '133','8716', '7162') ORDER BY n.cust_id ASC LIMIT 100
) a
LEFT JOIN m_cust_main b ON a.cust_id = b.cust_id
LEFT JOIN m_cust_org c ON a.cust_id = c.cust_id
LEFT JOIN m_cust_data d ON a.cust_id = d.cust_id
2.4 SPM 固定执行计划
CREATE GLOBAL|SESSION BINDING for <BindableStmt > USING <BindableStmt2>
SHOW GLOBAL|SESSION BINDINGS ; -- 查看绑定计划explain format = 'verbose' <BindableStmt2>;
show warnings; -- 通过执行 show warnings 了解该 SQL 语句使用了哪一条 binding

标签下价值机构排名
根据选中的属性(多值)

执行计划



总结
边栏推荐
- [Detailed explanation of binary search plus recursive writing method] with all the code
- bash for循环
- LyScript 实现对内存堆栈扫描
- 5个超好用手机开源自动化工具,哪个适合你?
- FR9811S6 SOT-23-6 23V, 2A Synchronous Step-Down DC/DC Converter
- GET 和 POST 有什么区别?
- 用于发票处理的 DocuWare,摆脱纸张和数据输入的束缚,自动处理所有收到的发票
- [论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比
- fast planner中拓扑路径搜索
- This article takes you to understand the principle of CDN technology
猜你喜欢

Redis发布订阅和数据类型

RICON:NER SOTA 又来!

JUC(三):锁核心类AQS ing

微信为什么使用 SQLite 保存聊天记录?

FR9811S6 SOT-23-6 23V,2A同步降压DC/DC转换器

【倒计时5天】探索音画质量提升背后的秘密,千元大礼等你来拿

Matlab学习11-图像处理之图像变换
![[LeetCode—Question 2 Sum of Two Numbers Detailed Code Explanation ] The source code is attached, which can be copied directly](/img/19/a3f58d5a1150d99571205a7e2f7345.png)
[LeetCode—Question 2 Sum of Two Numbers Detailed Code Explanation ] The source code is attached, which can be copied directly
![LeetCode 899 有序队列[字典序] HERODING的LeetCode之路](/img/95/1b63cfb25b9e0802666114f089fcb8.png)
LeetCode 899 有序队列[字典序] HERODING的LeetCode之路

QGIS绘制演习区域示意图
随机推荐
距LiveVideoStackCon 2022 上海站开幕还有3天!
shell编程-测试
【一起学Rust】Rust的Hello Rust详细解析
实至名归!九章云极DataCanvas公司荣获智能制造领域多项殊荣
Redis发布订阅和数据类型
XDR平台架构与关键技术解析
Activiti产生的背景和作用
Go 语言快速入门指南: 介绍及安装
ABAB-740新语法
下午见!2022京东云数据库新品发布会
字节最爱问的智力题,你会几道?
【一起学Rust】Rust包管理工具Cargo初步了解
RTP协议分析
Traceback (most recent call last): File
[LeetCode—Question 2 Sum of Two Numbers Detailed Code Explanation ] The source code is attached, which can be copied directly
【TypeScript】为什么要选择 TypeScript?
[Bubble sort and odd-even sorting]
技术总监需要会些什么?也太难了!
LeetCode 899 Ordered queue [lexicographical order] HERODING's LeetCode road
bash case用法