当前位置:网站首页>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

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

执行计划



总结
边栏推荐
猜你喜欢

Simple implementation of a high-performance clone of Redis using .NET (1)

JUC(三):锁核心类AQS ing

面试突击71:GET 和 POST 有什么区别?

缓存--伪共享问题

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

Generate interface documentation online

redis基础知识总结——数据类型(字符串,列表,集合,哈希,集合)

用于发票处理的 DocuWare,摆脱纸张和数据输入的束缚,自动处理所有收到的发票

【MySQL功法】第4话 · 和kiko一起探索MySQL中的运算符
![[Bubble sort and odd-even sorting]](/img/89/d63afe1900a05b2a5615fcc3c09ccb.png)
[Bubble sort and odd-even sorting]
随机推荐
[Star Project] Little Hat Plane Battle (9)
RICON:NER SOTA 又来!
【HCIP持续更新】STP协议相关保护机制
用C语言解决A+B问题,A-B问题,A*B问题
Realize 2d characters move left and right while jumping
笔试题:金额拆分
2022年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
零信任架构分析【扬帆】
Vs 快捷键---探索不一样的编程
LeetCode-48. 旋转图像
微信小程序获取用户手机号码
【MySQL功法】第2话 · 数据库与数据表的基本操作
ERC20通证标准是什么?
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
bash while循环和until循环
一文带你弄懂 CDN 技术的原理
后台图库上传功能
SmobilerService 推送实现
深度学习中数据到底要不要归一化?实测数据来说明!
【一起学Rust 基础篇】Rust基础——变量和数据类型