背景:
本人在工作开发的时候遇到过项目中一种情况,在业务数据日益增长的情况下,某个服务日志经常会出现服务超时的情况,代码分析后发现问题出在某一条比较复杂的sql语句中使用到了not in,直接将他改为not exists之后,发现服务执行要快了很多。
测试准备:
用户身份识别记录表tbl_visitor_identification,数据量为305W;
新用户身份识别记录表tbl_visitor_first_identification,数据量为104W。
测试内容:
-
in:
select
udc_biz_date,udc_visitor_sequence,udc_visitor_type
from
(select
udc_biz_date,
(
case
when udc_customer_id !=’ ’
then udc_customer_id
else
udc_cookie
end
)as udc_visitor_sequence, --用户唯一标志序列号(udc_customer_id/udc_cookie)
(
case
when udc_customer_id !=’ ’
then ‘01’
else
‘02’
end
)as udc_visitor_type --用户类型(01:客户;02:游客)
from dzyh_app.TBL_VISITOR_IDENTIFICATION
) a