- 【TiDB 版本】:v4.0.1GA
- 【问题描述】:
同一条sql,运行在mysql和tidb中执行计划是不一样的。并且执行时间也不同。tidb没有mysql执行效率高
上游mysql分表,查询其中一张表数据量是50w左右。查询时间为0.6s
下游tidb是总表,查询数量为100w左右。查询时间为2.9s
【mysql执行计划】:
【tidb执行计划】:
【SQL语句】:
SELECT
a.member_id,
a.member_name,
a.PASSWORD,
a.pay_password,
a.salt,
a.sex,
a.avatar,
a.real_name,
a.id_card,
a.phone,
a.birthday,
a.nickname,
a.vip_level,
a.agency_member_id,
a.agency_member_name,
a.promotion_code,
a.register_resource,
a.register_ip,
a.register_address,
a.register_device,
a.member_type,
a.freeze_status,
a.wx_openid,
a.qq,
a.qq_openid,
a.remark,
a.online_status,
a.latest_login_ip,
a.latest_login_address,
a.latest_login_time,
a.latest_recharge_time,
a.latest_login_device,
a.tenant_code,
a.create_time,
a.update_time
FROM
app_member AS a
WHERE
1 = 1
AND a.tenant_code = ‘xgcp’
AND a.vip_level = 2
ORDER BY create_time DESC
LIMIT 20;
mysql> SHOW STATS_HEALTHY where table_name=‘app_member’;
±--------±-----------±---------------±--------+
| Db_name | Table_name | Partition_name | Healthy |
±--------±-----------±---------------±--------+
| cpt | app_member | | 100 |
±--------±-----------±---------------±--------+
【索引信息】:
mysql执行计划所用的组合索引-
Columns | tenant_code |
---|---|
create_time | |
tidb执行计划所用到的组合索引 | |
Columns | tenant_code |
— | — |
member_type | |
【答疑】: | |
1.执行计划为什么不同,同时执行效率差这么多 | |
2.tidb为什么在扫描到索引的情况下,比mysql多一次全表扫描 |