所以直接select count(*) from orders 就可以了,但是这样的语句谁也没法说就一定不会出现,如果出现了那么我们希望在优化器这一层直接把语句改写了,毕竟order by在不能用到索引的情况下,代价还是很昂贵的,下面我们来看下,这2条语句在MySQL和TiDB 上的执行效果、...
TiDB 查询优化及调优系列(四)查询执行计划的调整及优化原理 注:以下语句及结果基本为当时实际环境所记录的情况,因为版本更新原因,可能和现有格式略有差别,如 count 等价于现在的 estRows. 案例1: Delete 涉及数据量过大导致 OOM MySQL [db_stat]> explain delete from t_stat where imp_date<='20200202';+...
# Process_time: 0.07 Wait_time: 0.002 Backoff_time: 0.002 Request_count: 1 Total_keys: 131073 Process_keys: 131072 Prewrite_time: 0.335415029 Commit_time: 0.032175429 Get_commit_ts_time: 0.000177098 Local_latch_wait_time: 0.106869448 Write_keys: 131072 Write_size: 3538944 Prewrite_region: 1 #...
最近遇到mongo集群性能问题,主要体现在查询性能或者聚合性能慢(查询类似关系型数据库中select * from xx where a='xx',另外聚合类似group by+count、sum),nosql与关系型数据库存在很多类似,比如分页查询语句是比较常见问题,分页优化在数据库优化原理类似.常见分页场景需求(本次主要基于这2种场景进行优化介绍) 徐靖 ...
TiDB 中常见的逻辑优化规则 优化器的优化过程可以简单的看成在一个搜索问题,即针对一条查询,在由各种可能的执行计划构成的巨大搜索空间内寻找到该查询的最优执行计划。不同的数据库查询优化器根据架构不同,对应的优化流程也有所不同。TiDB 的查询优化流程主要分为逻辑优化和物理优化两部分。在逻辑优化中,利用关系...
TiDB 上的 Hash Aggregation 算子采用多线程并发优化,执行速度快,但会消耗较多内存。下面是一个 Hash Aggregate 的例子: TiDB(root@127.0.0.1:test) > explain select /*+ HASH_AGG() */ count(*) from t;+---+---+---+---+---+| id | estRows | task | access object | operator info |+-...
TiDB 上的 Hash Aggregation 算子采用多线程并发优化,执行速度快,但会消耗较多内存。下面是一个 Hash Aggregate 的例子: TiDB(root@127.0.0.1:test) > explain select /*+ HASH_AGG() */ count(*) from t;+---+---+---+---+---+| id | estRows | task | access object | operator info |+-...
LIMIT 100限定了获取 100 条记录,如果checkTime和articleid列之间的相关度不高,在独立性假设失效时,优化器估算走checkTime上的索引并满足articleid条件时扫描的行数,可能比走articleid上的索引扫描的行数更少 影响 业务响应延迟不稳定,监控 Duration 偶尔出现抖动 建议 手动analyze table,配合 crontab 定期 analyze,维...
TiDB 的逻辑优化是基于规则的优化,通过对输入的逻辑执行计划按顺序应用优化规则,使整个逻辑执行计划变得更加高效。这些常用逻辑优化规则包括: 1.png 部分逻辑优化规则示例如下: 规则4:Max / Min 优化 Max/ Min 优化,会对Max/ Min 语句进行改写。如下面的语句: ...