TiDB 高级系统管理笔记:sql优化
答:
TiKV读取数据并计算的模块 , 我们定义为Coprocessor , 该概念灵感来自于HBase
文章图片
TiKV源码解析系列文章(十四)Coprocessor概览
如图 , 以上查询语句在TiDB中处理如下:
TiDB收到查询语句 , 对语句进行分析 , 计算出物理执行计划 , 组织称TiKV的Coprocessor请求 。 TiDB将该Coprocessor请求根据数据的分布 , 分发到所有相关的TiKV上 。 TiKV在收到该Coprocessor请求后 , 根据请求算子对数据进行过滤聚合 , 然后返回给TiDB 。 TiDB在收到所有数据的返回结果后 , 进行二次聚合 , 并将最终结果计算出来 , 返回给客户端 。
文章图片
TiKVCoprocessor处理的读请求目前主要分类三种:
DAG:执行物理算子 , 为SQL计算出中间结果 , 从而减少TiDB的计算和网络开销 。 这个是绝大多数场景下Coprocessor执行的任务 。 Analyze:分析表数据 , 统计、采样表数据信息 , 持久化后被TiDB的优化器采用 。 CheckSum:对表数据进行校验 , 用于导入数据后一致性校验 。TiKV执行器是基于VolcanoModel(火山模型) , 一种经典的基于行的流式迭代模型 。 现在主流的关系型数据库都采用了这种模型 , 例如Oracle , MySQL等 。
我们可以把每个算子看成一个迭代器 。 每次调用它的next()方法 , 我们就可以获得一行 , 然后向上返回
答:
一条读请求 , 使用TableScan算子 , 需要扫出所有行的需求列 , 性能不高 。 3.0之前使用的是火山模型去让请求只需要扫几行 。
SELECT*FROMtableWHEREage>10limit1
每次都从下层算子取一行 , 至多取LIMIT行 , 返回给上层
不断从下层算子取一行 , 按照age>10为过滤条件 , 知道有一条满足条件了返回给上层
扫下一行的age列返回给上层
文章图片
文章图片
文章图片
useindex
文章图片
文章图片
统计信息不准确
【TiDB 高级系统管理笔记:sql优化】
文章图片
文章图片
文章图片
hint
文章图片
文章图片
文章图片
小白:
文章图片
文章图片
文章图片
文章图片
文章图片
#%E8%A1%A8%E7%9A%84%E5%81%A5%E5%BA%B7%E5%BA%A6%E4%BF%A1%E6%81%AF
- MySQL|mysql 分组查询和聚焦函数,教你更高级—DBA技能包04
- APS计划排产系统解决方案,高级计划排程系统有哪些功能模块?
- 智商税|这5种家电,买时以为是“高级货”,用起来才知道是“智商税”
- 四川长虹|“硬刚”长虹!四季沐歌造“3D全息”小家电,智能高级却49元人人用得起
- 美女姐妹花变身靓丽车模,气质高级优雅,美得非同一般
- 高级美女车模,傲人身材前凸后翘,太有魅力了
- 软硬件|北京建成全球首个高级别自动驾驶示范区
- 老板|怎样实现高级经理人的企业家化
- 数字经济|北京建成全球首个高级别自动驾驶示范区
- 程序员|2021全球程序员收入报告:字节跳动高级工程师以年薪274万排名第五