使用非索引列搜索top N条记录时,TiDB的执行逻辑为何

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
标准测试集群,3PD + 2 TiDB + 3TiKV + 2TiFlash

【概述】 场景 + 问题概述

用户归档场景, 存在某订单表order (数十亿级), 主键为订单号, 存在一列为订单创建日期create_time, 在归档场景中,往往需要根据订单创建日期筛选找出top N笔数据进行归档操作,如此反复。

现用户问,订单创建日期列上不存在二级索引,若执行 select top 1000 * from order where create_time < ‘时间范围’。 在TiDB上会如何执行? 是否会先从列存TiFlash扫创建日期列并排序找出top N的行号,然后从TiKV取数? 还是直接通过tiflash或者tikv执行?如何保证性能?

【现象】 业务和数据库现象
大表归档业务。

【问题】 当前遇到的问题

评估是否存在潜在性能瓶颈。

【 TiDB 版本】 TiDB 5.0

1 个赞

explain analyze select top 1000 * from order where create_time < ‘时间范围’

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。