优化案例--改写IN条件为INNER JOIN
--======================================
--原始语句
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的更多相关文章
- 数栈SQL优化案例:隐式转换
MySQL是当下最流行的关系型数据库之一,互联网高速发展的今天,MySQL数据库在电商.金融等诸多行业的生产系统中被广泛使用. 在实际的开发运维过程中,想必大家也常常会碰到慢SQL的困扰.一条性能不好 ...
- Hive优化案例
1.Hadoop计算框架的特点 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业效率相对比较低,比如即使有几百万的表,如果多次关联多次汇总,产生十几个jobs,耗时很长.原因是map re ...
- 记一次mysql多表查询(left jion)优化案例
一次mysql多表查询(left jion)优化案例 在新上线的供需模块中,发现某一个查询按钮点击后,出不来结果,找到该按钮对应sql手动执行,发现需要20-30秒才能出结果,所以服务端程序判断超时, ...
- mysql优化案例
MySQL优化案例 Mysql5.1大表分区效率测试 Mysql5.1大表分区效率测试MySQL | add at 2009-03-27 12:29:31 by PConline | view:60, ...
- MySQL的索引单表优化案例分析
建表 建立本次优化案例中所需的数据库及数据表 CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`article`( `id` INT ...
- 数据库优化案例——————某市中心医院HIS系统
记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...
- 条件放在left join后面和where后面
有这样一个查询的差异: 两张表如下: 语句在这里: create table #AA ( ID int, Name nvarchar() ) insert into #AA ,'项目1' union ...
- SQL 优化案例 1
create or replace procedure SP_GET_NEWEST_CAPTCHA( v_ACCOUNT_ID in VARCHAR2, --接收短信的手机号 v_Tail_num i ...
- 老李案例分享:Weblogic性能优化案例
老李案例分享:Weblogic性能优化案例 POPTEST的测试技术交流qq群:450192312 网站应用首页大小在130K左右,在之前的测试过程中,其百用户并发的平均响应能力在6.5秒,性能优化后 ...
随机推荐
- Django 的分页器
from 不能发json格式 只能发四种格式 view from django.shortcuts import render,HttpResponse # Create your views ...
- 获取properties配置
1. 使用@Value @Value("${swagger.enable}") 使用Spring的PropertyPlaceholderConfigurer关联 @Val ...
- \\IP\e$方式访问服务器的E盘被拒绝是什么原因?
问题:服务器本地管理员的权限,首先访问是被拒绝而不是报用户名密码错误:其次远程桌面服务器是可以访问我个人点的D.E盘的 打开默认共享方法:先在控制面板的“服务”,看SERVER服务是否启动,如果没有启 ...
- 配置git 环境变量
1.从Git官网下载windows版本的git:http://git-scm.com/downloads 2.一般使用默认设置即可:一路next,git安装完毕! 3.但是如果这时你打开windows ...
- js判断是否ie浏览器或者浏览器版本
var Sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.match(/rv:([\d.]+)\) like g ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第十二周
java学习第十章:图形程序设计 本章,介绍的是如何编写使用图形用户界面GUI的java程序.主要讲的是如何编写定义屏幕上的窗口大小和位置的程序,如何在窗口中采用多种字体显示文本,如何显示 ...
- java 蓝桥杯算法提高 矩阵乘法
思路:根据提示的内容,我们可以得到c[i][j] += a[i][k]*b[k][j],k>=0&&k<s PS:这道题本身不难,但是当我定义A[m][s] B[s][n] ...
- Culling & Depth Testing
[Culling & Depth Testing] Culling is an optimization that does not render polygons facing away f ...
- fedora 16 yum yuan
暑假买了几本Linux的书一直放在书架上没看,周末闲着没事就拿起本<LinuxC从入门到精通>看了起来,初学Linux首先要做的便是在电脑上安装Linux系统.于是按书上的要求下载了Fed ...
- 理解python中的元类
一,理解类也是对象 在python中类同样也是一种对象,只要使用关键字class,Python解释器在执行的时候就会创建一个对象,这个对象(类)自身拥有创建对象(类实例)的能力,这就是为什么他是一个类 ...