--======================================
--原始语句
SET STATISTICS IO ON
SELECT COUNT(DISTINCT parent_commender_id) AS COUNT
FROM t_commend_day_total_info c WITH(NOLOCK)
WHERE 1 = 1
AND c.product_id IN (1,2,4,5,6,7,8,9)
AND parent_commender_id IN (
SELECT id
FROM t_commender_user_property
WHERE status=4)
AND parent_commender_id IN (
SELECT id
FROM t_commender_user_property
WHERE cooperation_way=0)
AND c.datetime >= 20140103
AND c.datetime <= 20140103
/*
(1 行受影响)
表 'Worktable'。扫描计数 1,逻辑读取 883 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 't_commender_user_property'。扫描计数 2,逻辑读取 38 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 't_commend_day_total_info'。扫描计数 200,逻辑读取 398042 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
*/
/*

--===================================
--由于满足以下条件中一个或多个
--1.条件IN中外部数据与子查询数据是一对一的关系
--2.对查询结果排重
--因此可以将IN条件改写为INNDE JOIN
--===================================

--==================================
--改写后语句
SET STATISTICS IO ON
SELECT COUNT(DISTINCT parent_commender_id) AS COUNT
FROM t_commend_day_total_info c WITH(NOLOCK)
INNER JOIN t_commender_user_property T1
ON T1.id=parent_commender_id
WHERE T1.status=4 AND T1.cooperation_way=0
AND c.product_id IN (1,2,4,5,6,7,8,9)
AND c.datetime >= 20140103
AND c.datetime <= 20140103
/*
表 't_commender_user_property'。扫描计数 1,逻辑读取 19 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 't_commend_day_total_info'。扫描计数 1,逻辑读取 2082 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
*/
/*

在将IN条件改成INNER JOIN 时,一定要考虑数据是一对一还还是一对多以及多对一的关系, 如果是一对多的关系,需要对查询结果集排重。

如果除IN条件外的条件可以过滤掉大部分数据,则考虑使用IN 如果需要依赖IN条件来过滤大部分数据,则考虑使用INNER JOIN 在改写语句前需检查统计是否过期,预估执行行数和实际执行行数之间差距。

优化案例--改写IN条件为INNER JOIN的更多相关文章

  1. 数栈SQL优化案例:隐式转换

    MySQL是当下最流行的关系型数据库之一,互联网高速发展的今天,MySQL数据库在电商.金融等诸多行业的生产系统中被广泛使用. 在实际的开发运维过程中,想必大家也常常会碰到慢SQL的困扰.一条性能不好 ...

  2. Hive优化案例

    1.Hadoop计算框架的特点 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业效率相对比较低,比如即使有几百万的表,如果多次关联多次汇总,产生十几个jobs,耗时很长.原因是map re ...

  3. 记一次mysql多表查询(left jion)优化案例

    一次mysql多表查询(left jion)优化案例 在新上线的供需模块中,发现某一个查询按钮点击后,出不来结果,找到该按钮对应sql手动执行,发现需要20-30秒才能出结果,所以服务端程序判断超时, ...

  4. mysql优化案例

    MySQL优化案例 Mysql5.1大表分区效率测试 Mysql5.1大表分区效率测试MySQL | add at 2009-03-27 12:29:31 by PConline | view:60, ...

  5. MySQL的索引单表优化案例分析

    建表 建立本次优化案例中所需的数据库及数据表 CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`article`( `id` INT ...

  6. 数据库优化案例——————某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  7. 条件放在left join后面和where后面

    有这样一个查询的差异: 两张表如下: 语句在这里: create table #AA ( ID int, Name nvarchar() ) insert into #AA ,'项目1' union ...

  8. SQL 优化案例 1

    create or replace procedure SP_GET_NEWEST_CAPTCHA( v_ACCOUNT_ID in VARCHAR2, --接收短信的手机号 v_Tail_num i ...

  9. 老李案例分享:Weblogic性能优化案例

    老李案例分享:Weblogic性能优化案例 POPTEST的测试技术交流qq群:450192312 网站应用首页大小在130K左右,在之前的测试过程中,其百用户并发的平均响应能力在6.5秒,性能优化后 ...

随机推荐

  1. halcon 如何把一个region截取出来保存为图像

    read_image(Image,'monkey') gen_circle(region,200,200,150) reduce_domain(Image,region,Mask) crop_doma ...

  2. application-defined exception

    dataSnap服务器,客户端调用的时候写错了一句话, SQLConnection1->CloneConnection(); 改为 SQLConnection1->Close(); 就好了 ...

  3. Windows下安装logstash

    1. 下载 https://www.elastic.co/downloads/logstash https://www.elastic.co/downloads/past-releases 2. 文档 ...

  4. Maven使用Nexus私服的配置

    工作记录 —————————————————————————————— 配置文件 apache-maven-3.3.3\conf\settings.xml 在mirrors(镜像)之间配置. url为 ...

  5. java核心知识点 --- 线程池ThreadPool

    线程池是多线程学习中需要重点掌握的. 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互.在这种情形下,使用线程池可以很好的提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考 ...

  6. 蓝桥杯算法训练 java算法 表达式求值

    问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...

  7. Camera’s Depth Texture

    [Camera’s Depth Texture] In Unity a Camera can generate a depth or depth+normals texture. This is a ...

  8. Culling & Depth Testing

    [Culling & Depth Testing] Culling is an optimization that does not render polygons facing away f ...

  9. IT 360服务器监控

  10. Hibernate批量抓取

    ------------------siwuxie095 Hibernate 批量抓取 以客户和联系人为例(一对多) 1.批量抓取 同时查询多个对象的关联对象,是 Hibernate 抓取策略的一种 ...