为了优化查询 TiFlash 引擎的 SQL,可以考虑以下几个方面:
-
使用 TiFlash 支持的函数:TiFlash 不是所有的函数都支持下推,建议对准官方的支持列表,按照下推列表去规范 SQL。
-
绑定 SQL 计划或者强制走索引:如果查询结果不准确,可以适当绑定 SQL 计划或者强制走索引。可以使用以下语句进行绑定:
CREATE [GLOBAL | SESSION] BINDING FOR BindableStmt USING BindableStmt;
- 手动重新统计表信息:如果避开了自动 analyze 时间,则应该手动重新统计表信息。可以使用以下语句进行手动统计:
show stats_meta where table_name='xxx';
show stats_healthy where table_name='xxx';
show STATS_HISTOGRAMS where table_name='xxx';
analyze table xxx;
-
避免热点问题:可以使用聚簇表和 where 过滤数据保留尽可能少的数据记录,先找主键再 join,避免走全表扫描。对于不确定字段组合的情况,可以考虑使用 TiFlash 来加速不确定条件的筛选。
-
调整 TiFlash 的并发数:可以适当调大
tidb_distsql_scan_concurrency增大并发度,同时 TiFlash 节点要独立部署,副本最好大于 1 小于 TiKV 的数量。
其他的一些延伸阅读:
https://docs.pingcap.com/zh/tidb/stable/explain-mpp
https://docs.pingcap.com/zh/tidb/v5.0/use-tiflash#tiflash-支持的计算下推