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
- 地心世界存在吗?多个地下隧道被发现,地下或存在高级文明(上)
- 如果“动物园理论”是真的,那么高级文明圈养人类有什么目的?
- 人类会是宇宙中最高级的文明吗?探测器传回的信号早已给出答案
- |曝NXP关闭中国大陆高级电源研发部门
- 科学家在土卫二上发现大片水资源,或能证实该星球有高级文明潜伏
- 海洋生物比陆地生物起源更早,为什么海洋没能诞生高级文明?
- 地球海洋面积比大陆还大,为什么海洋没能诞生高级文明?
- 手机CMOS硬件越高级拍照就越好?你看看苹果、三星
- 魅族|小众高级感文案
- 付费的聊天频道更多 电报高级用户月费5美元
