MYSQL与TiDB的执行计划

前言

这里采用了tpc-h一个数据库的数据量来进行查询计划的对比。并借助tpc-h中的22条查询语句进行执行计划分析。

mysql采用的是标准安装,TiDB采用的是单机测试版,这里的性能结果不能说明其性能差异

本文章主要目的是对比Mysql与TiDB在执行sql查询时的差异。

mysql版本5.7   TiDB版本v2.0.0-rc.4

准备阶段

数据导入TiDB后是缺少统计信息的:

SHOW STATS_META

可以手工进行统计信息的刷新

ANALYZE TABLE nation,region,part,supplier,partsupp,customer,orders,lineitem

刷新后再次查看SHOW STATS_META

首先选择Q17做为例子,进行查询

select
    sum(l_extendedprice) / 7.0 as avg_yearly
from
    lineitem,
    part
where
    p_partkey = l_partkey
    and p_brand = 'Brand#23' # 指定品牌。 BRAND=’Brand#MN’ ,M和N是两个字母,代表两个数值,相互独立,取值在1到5之间
    and p_container = 'MED BOX' # 指定包装类型。在TPC-H标准指定的范围内随机选择
    and l_quantity < (
        select
            0.2 * avg(l_quantity)
        from
            lineitem
        where
            l_partkey = p_partkey
    );

part表是20万 P_PARTKEY是主键,而lineitem是600万

mysql的查询时间大概是1秒左右,TiDB的查询时间大概是30秒,对比发现mysql在建立约束时,会自动创建一个索引。

mysql的执行计划:

 mysql首先对part表进行了查询,由于经过where的处理20万数据已经被过滤到几百条了。再与lineitem关联,最后再处理子查询。

查询过程中借用了主键关联,所以

TiDB的执行计划

猜你喜欢

转载自www.cnblogs.com/maobuji/p/8876530.html