--======================================
--原始语句
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 在改写语句前需检查统计是否过期,预估执行行数和实际执行行数之间差距。

最新文章

  1. React Native 打包.jsx文件
  2. 微信支付官方.net版之坑你没商量
  3. js DOM的几个常用方法
  4. C#透明窗体代码详解
  5. Eclipse:快捷
  6. 高性能CSS(一)
  7. .net软件工程师面试题(参考答案)
  8. iOS8模拟器键盘弹不出来
  9. 使用PHP和HTML5 FormData实现无刷新文件上传教程
  10. iOS开发之Info.plist文件
  11. VisualStudioCode创建的asp.net core控制台程序部署到linux
  12. Maven 新手入门+命令大全
  13. 若sql语句中order by指定了多个字段,怎么排序?
  14. PAT L3-001 凑零钱(01背包dp记录路径)
  15. android 日期控件 DatePicker
  16. win8 关闭防火墙
  17. 手机浏览器_安卓_苹果手机Webview 中唤醒APP
  18. shell 中可以for 循环的时间加减日期格式
  19. Django 2.0 学习(11):Django setuptools
  20. 【leetcode 145. 二叉树的后序遍历】解题报告

热门文章

  1. memcached内存分配机制
  2. ffmpeg强制使用TCP方式读取rtsp流
  3. ffmpeg源码分析二:main函数和transcode函数 (转2)
  4. 前端开发之JavaScript HTML DOM理论篇一
  5. css实现类似heigth:100%的方法
  6. UGUI防止穿透和判断点击的是否是UI
  7. Xcode8 问题
  8. Python——字典与字典方法
  9. 关于iOS URL缓存机制原理解析
  10. devcloud 基础架构