mariadb federatedx 查询远程mysql表
SELECT COUNT(asn_line_id) FROM sinv_asn_line
执行时间
mysql远程库上直接执行
mysql federated 查询远程mysql表
SELECT count(1) FROM sinv_asn_line
mysql federated 查询远程mysql表
SELECT count(1) FROM sinv_asn_line LEFT JOIN sinv_asn_header ON sinv_asn_line.asn_header_id = sinv_asn_header.asn_header_id
执行时间
添加索引后,在误差范围内执行时间上没有什么变化
最终优化方案
似乎远程表数据传输占用了很大的IO时间造成执行缓慢
1.创建远程表时不需要表结构和源表结构完全对应 可以只选用 使用到的字段和一些关键字段,也就是远程表的字段是源表字段的子集
例如:
其中通过test1 精简到只剩下关键使用字段和可能使用字段 已经来到了 6s 级 后面到test3 只剩下使用的asn_header_id 字段 还是6s 级 瓶颈已经部署传输数据量了
SELECT count(1) FROM sinv_asn_line_test3 line LEFT JOIN sinv_asn_header_test3 header ON line.asn_header_id = header.asn_header_id
查询时间从300+ 缩减到了 6.348
2.在进 表 连接时 先尽量缩小数据范围 减少数据量
SELECT count(1) FROM (SELECT asn_header_id FROM sinv_asn_line_test WHERE needed_date = '2020-08-26') line LEFT JOIN sinv_asn_header_test header ON line.asn_header_id = header.asn_header_id
3.极限的话可以针对特定的 查询 建立 专用精简字段的远程表提供查询