实践:mysql中exists与in性能对比

在无索引情况下,对305W条数据的tbl_visitor_identification表和104W条数据的tbl_visitor_first_identification表进行查询测试。使用in的查询耗时约35s-37s,而exists查询耗时约0.9s-2s。exists在外表数据小内表数据大时表现更优,in则在外表数据大内表数据小时表现更佳。not in会导致索引失效,推荐使用not exists。内外表的大小取决于临时表与loop循环的平衡,决定了in和exists的性能选择。
摘要由CSDN通过智能技术生成

背景:
本人在工作开发的时候遇到过项目中一种情况,在业务数据日益增长的情况下,某个服务日志经常会出现服务超时的情况,代码分析后发现问题出在某一条比较复杂的sql语句中使用到了not in,直接将他改为not exists之后,发现服务执行要快了很多。

测试准备:
用户身份识别记录表tbl_visitor_identification,数据量为305W;
新用户身份识别记录表tbl_visitor_first_identification,数据量为104W。

测试内容

  1. 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值