当前位置:网站首页>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
标签下价值机构排名
根据选中的属性(多值)
执行计划
总结
边栏推荐
猜你喜欢
Machine Learning (Chapter 1) - Feature Engineering
一个扛住 100 亿次请求的红包系统,写得太好了!!
For invoice processing DocuWare, cast off the yoke of the paper and data input, automatic processing all the invoice received
asdn涨薪技术之apifox+Jenkins如何玩转接口自动化测试
Android 技术面试准备(含面试题及答案)
MySQL - 2059 - Authentication plugin ‘caching_sha2_password‘ cannot be loaded
FE主导打造一个运营活动平台
「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
【JS 逆向百例】某网站加速乐 Cookie 混淆逆向详解
记住用户名案例(js)
随机推荐
智能日报脚本
在线生成接口文档
[深入浅出]三位数排序
Fastjson反序列化
[Wrong title] Circuit maintenance
Lease recovery system based on PHP7.2+MySQL5.7
viewstub 的详细用法_pageinfo用法
零信任架构分析【扬帆】
基于PHP7.2+MySQL5.7的回收租凭系统
Objective - C code analysis of the deep and shallow copy
LeetCode-142. 环形链表 II
LyScript implements memory stack scanning
小身材有大作用——光模块寿命分析(二)
Summary of redis basics - data types (strings, lists, sets, hashes, sets)
最牛逼的集群监控系统,它始终位列第一!
微信小程序获取用户手机号码
c语言进阶篇:内存函数
QGIS绘制演习区域示意图
LeetCode刷题笔记:105.从前序与中序遍历序列构造二叉树
LeetCode 899 有序队列[字典序] HERODING的LeetCode之路