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

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

执行计划



总结
边栏推荐
猜你喜欢
机器学习(第一章)—— 特征工程
Matlab学习13-图像处理之可视化GUI程序
劝退背后。
[论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比
asdn涨薪技术之apifox+Jenkins如何玩转接口自动化测试
性能优化|从ping延时看CPU电源管理
字节最爱问的智力题,你会几道?
微信为什么使用 SQLite 保存聊天记录?
For invoice processing DocuWare, cast off the yoke of the paper and data input, automatic processing all the invoice received
优维低代码:Provider 构件
随机推荐
基于Sikuli GUI图像识别框架的PC客户端自动化测试实践
用于发票处理的 DocuWare,摆脱纸张和数据输入的束缚,自动处理所有收到的发票
Matlab学习10-图像处理之傅里叶变换
机器比人更需要通证
fastposter v2.9.0 程序员必备海报生成器
LeetCode 899 有序队列[字典序] HERODING的LeetCode之路
fast planner中拓扑路径搜索
What is a smart contract?
dataset数据集有哪些_数据集类型
opencv学习—VideoCapture 类基础知识「建议收藏」
[论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比
Machines need tokens more than people
html+css+php+mysql实现注册+登录+修改密码(附完整代码)
面试突击71:GET 和 POST 有什么区别?
OFDM 十六讲 4 -What is a Cyclic Prefix in OFDM
数据库一席谈:打造开源的数据生态,支撑产业数字化浪潮
bash while循环和until循环
微信为什么使用 SQLite 保存聊天记录?
LyScript 实现对内存堆栈扫描
缓存--伪共享问题