两表like条件关联使用limit和limit offset性能差异大

SELECT a.*
        ,b.addr_full_name
        ,b.gridcode
FROM gd_eda.temp_wyj_obd_01 a
        ,gd_lx.address_grid b
WHERE b.addr_full_name LIKE a.address || '%'
        AND a.address IS NOT NULL
        AND b.gridcode IS NOT NULL limit 0,500
SQL执行时跑了几万秒没有结果,但把最后的limit 0,500换成limit 500,20秒左右就可以出结果。


2 回答

limit0,500时,在默认 set _t_gcluster_limit_optimize=1;的情况下,执行器会先去各个节点评估本节点结果集行数,
该语句2表关联条件为 b.addr_full_name like a.address||'%',左表(小表,数据量为140多万)拉复制表后,
与右表的分片按nest-loop方式 join,2表数据量都很大,join执行的时间长,导致长时间评估不完;
limit 500时,不按照上述优化执行,直接下发到第一个节点执行,虽然也是nest-loop join,但是当结果集行数到500时就退出了,对外表现性能更好。
性能差异的根本原因是在sql的join上面,建议请用户核查下sql的逻辑是否有问题;或session级设置上述参数值为0。

2018-6-8 13:37
改造业务逻辑或者执行该sql时设置set _t_gcluster_limit_optimize=0。
2018-6-8 13:37

撰写回答

您需要登录后才可以回帖 登录 | 立即注册

提问者

发布45
回答130

相关问题

相关资料