原文地址:https://www.gbase.cn/community/post/3549
某客户反映一条业务测试sql查询缓慢(3节点集群),百万级数据量用时6-8s,不满足小于1秒的业务需求!由于客户刚使用8a不久,希望远程进行优化演示。
客户sql也比较简单,为两表关联分页查询,sql如下:
SELECT * FROM AAAA a,BBBB b WHERE a.AAC001_JY = to_char(b.AAC001_jy) AND a.AAB301 like concat(‘5106’,‘%’) AND a.ywlx= ‘1’ limit 0,100;
优化过程:
1、首先检查a/b表的表结构,发现表a为hash分布表,分布列AAC001_JY,表b为随机分布表
2、表a的AAC001_JY列为varchar数据类型,表b的AAC001_jy列为double数据类型
基于以上两点,给出优化建议如下:
将表b重建为hash分布表,选择AAC001_jy为分布列,同时将AAC001_jy字段数据类型调整为varchar。
进行上述调整后,sql执行时间降低到1s左右,上下波动,继续优化对于语句中like concat(‘5106’,‘%’)写法颇为陌生(后查询资料为mybaits的语法),将其调整整为常规like '5106%‘后,查询时间稳定在500ms左右