查看: 2649|回复: 8

sql 语句优化

[复制链接]
论坛徽章:
0
发表于 2009-8-19 11:34 | 显示全部楼层 |阅读模式
请各位看看下面的sql语句,会不会有性能上的问题
最主要的TD_GROUP_CUSTPRODUCT_REF表大概有100w条记录,不会有增长。
虽然看着有点眼晕,但还是希望各位能给点建议,因为我不想挨骂
在线等!
----
select distinct
TD_GROUP_CUSTPRODUCT_REF.GROUP_PRO_ID,
TD_GROUP_CUSTPRODUCT_REF.GROUP_ID,
TD_GROUP_CUSTPRODUCT_REF.CUST_NAME,
TD_GROUP_CUSTPRODUCT_REF.GROUP_TYPE_ID,
TD_GROUP_CUSTPRODUCT_REF.PRODUCT_ID,
TD_GROUP_CUSTPRODUCT_REF.PRODUCT_CODE,
TD_GROUP_CUSTPRODUCT_REF.PRODUCT_NAME,
TD_GROUP_CUSTPRODUCT_REF.PRODUCT_TYPE_ID,
TD_GROUP_CUSTPRODUCT_REF.DEAL_NAME,
TD_GROUP_CUSTPRODUCT_REF.DEAL_CERT_NUM,
TD_GROUP_CUSTPRODUCT_REF.DEAL_PHONE,
TD_GROUP_CUSTPRODUCT_REF.DEAL_EMAIL,
TD_GROUP_CUSTPRODUCT_REF.DEAL_RELA_METHOD,
TD_GROUP_CUSTPRODUCT_REF.CREATE_TIME,
TD_GROUP_CUSTPRODUCT_REF.CREATE_STAFF_ID,
TD_GROUP_CUSTPRODUCT_REF.CREATE_STAFF_NAME,
TD_GROUP_CUSTPRODUCT_REF.CREATE_REMARK,
TD_GROUP_CUSTPRODUCT_REF.CREATE_AREA_ID,
TD_GROUP_CUSTPRODUCT_REF.CREATE_AREA_NAME,
TD_GROUP_CUSTPRODUCT_REF.CREATE_COUNTRY_ID,
TD_GROUP_CUSTPRODUCT_REF.CREATE_COUNTRY_NAME,
TD_GROUP_CUSTPRODUCT_REF.STATE,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_TIME,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_STAFF_ID,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_STAFF_NAME,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_REASON,
TD_GROUP_CUSTPRODUCT_REF.LOSE_REASON,
TD_GROUP_CUSTPRODUCT_REF.REGISTER_STAFF_ID,
TD_GROUP_CUSTPRODUCT_REF.REGISTER_TIME,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_STAFF_NAME,
   
count(distinct TD_GROUP_USER.GROUP_USER_ID),
count(distinct TD_GROUP_USERPROBUY.GROUP_USER_ID),
TD_GROUP_CUST. MGR_STAFF_ID   
from TD_GROUP_CUSTPRODUCT_REF
left join TD_GROUP_USER on
(TD_GROUP_USER.GROUP_ID=TD_GROUP_CUSTPRODUCT_REF.GROUP_ID)
join TD_GROUP_USERPROBUY on
(TD_GROUP_USERPROBUY.GROUP_PRO_ID=TD_GROUP_CUSTPRODUCT_REF.GROUP_PRO_ID)
join TD_GROUP_CUST on
(TD_GROUP_CUST.GROUP_ID=TD_GROUP_CUSTPRODUCT_REF.GROUP_ID)
where TD_GROUP_USERPROBUY.GROUP_ID  
in
(select TD_GROUP_CUST.GROUP_ID from TD_GROUP_CUST
where TD_GROUP_CUST.MGR_STAFF_ID='E00001')
and TD_GROUP_CUSTPRODUCT_REF.PRODUCT_ID=1
group by
TD_GROUP_CUSTPRODUCT_REF.GROUP_PRO_ID,
TD_GROUP_CUSTPRODUCT_REF.GROUP_ID,
TD_GROUP_CUSTPRODUCT_REF.CUST_NAME,
TD_GROUP_CUSTPRODUCT_REF.GROUP_TYPE_ID,
TD_GROUP_CUSTPRODUCT_REF.PRODUCT_ID,
TD_GROUP_CUSTPRODUCT_REF.PRODUCT_CODE,
TD_GROUP_CUSTPRODUCT_REF.PRODUCT_NAME,
TD_GROUP_CUSTPRODUCT_REF.PRODUCT_TYPE_ID,
TD_GROUP_CUSTPRODUCT_REF.DEAL_NAME,
TD_GROUP_CUSTPRODUCT_REF.DEAL_CERT_NUM,
TD_GROUP_CUSTPRODUCT_REF.DEAL_PHONE,
TD_GROUP_CUSTPRODUCT_REF.DEAL_EMAIL,
TD_GROUP_CUSTPRODUCT_REF.DEAL_RELA_METHOD,
TD_GROUP_CUSTPRODUCT_REF.CREATE_TIME,
TD_GROUP_CUSTPRODUCT_REF.CREATE_STAFF_ID,
TD_GROUP_CUSTPRODUCT_REF.CREATE_STAFF_NAME,
TD_GROUP_CUSTPRODUCT_REF.CREATE_REMARK,
TD_GROUP_CUSTPRODUCT_REF.CREATE_AREA_ID,
TD_GROUP_CUSTPRODUCT_REF.CREATE_AREA_NAME,
TD_GROUP_CUSTPRODUCT_REF.CREATE_COUNTRY_ID,
TD_GROUP_CUSTPRODUCT_REF.CREATE_COUNTRY_NAME,
TD_GROUP_CUSTPRODUCT_REF.STATE,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_TIME,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_STAFF_ID,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_STAFF_NAME,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_REASON,
TD_GROUP_CUSTPRODUCT_REF.LOSE_REASON,
TD_GROUP_CUSTPRODUCT_REF.REGISTER_STAFF_ID,
TD_GROUP_CUSTPRODUCT_REF.REGISTER_TIME,
TD_GROUP_CUSTPRODUCT_REF.REMOVE_STAFF_NAME,
TD_GROUP_CUST. MGR_STAFF_ID
having
TD_GROUP_CUST.MGR_STAFF_ID='E00001'
and
TD_GROUP_CUSTPRODUCT_REF.PRODUCT_ID=1;
论坛徽章:
0
 楼主| 发表于 2009-8-19 11:45 | 显示全部楼层
别沉啊

使用道具 举报

回复
认证徽章
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:142013年新春福章
日期:2013-02-25 14:51:24
发表于 2009-8-19 12:40 | 显示全部楼层
不好说。
应该还好吧。

最主要看TD_GROUP_CUSTPRODUCT_REF上的数据分布

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2009-8-19 12:51 | 显示全部楼层
估计性能不会太好, 4张表进行外联结, 而且还有subquery!

使用道具 举报

回复
认证徽章
论坛徽章:
89
生肖徽章2007版:鼠
日期:2009-03-10 21:19:05生肖徽章2007版:牛
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53生肖徽章2007版:兔
日期:2009-10-14 09:31:39生肖徽章2007版:龙
日期:2009-03-10 21:14:14生肖徽章2007版:蛇
日期:2009-03-16 10:41:01生肖徽章2007版:马
日期:2009-10-21 16:45:13生肖徽章2007版:羊
日期:2009-03-24 07:32:42生肖徽章2007版:猴
日期:2008-01-02 17:35:53生肖徽章2007版:鸡
日期:2008-01-02 17:35:53
发表于 2009-8-19 12:54 | 显示全部楼层
能不能只traceonly,看看执行计划?

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2009-8-19 13:03 | 显示全部楼层


就目前你这个语句, 有2点有问题!

(1)既然你已经用了group by, 那为什么在select中还用distinct 呢?
因为select中用distinct 和不用, 结果有可能不是完全相同的!
(2)在having子句中的条件, 完全应该加在where子句中!


使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2009-8-19 13:13 | 显示全部楼层
原帖由 bell6248 于 2009-8-19 13:03 发表


就目前你这个语句, 有2点有问题!

(1)既然你已经用了group by, 那为什么在select中还用distinct 呢?
因为select中用distinct 和不用, 结果有可能不是完全相同的!
(2)在having子句中的条件, 完全应该加在where子句中!



having 中的字句在where中有,但是查出来的结果有些并没有进行过滤,无赖只好在having中再写一次
其实这也是我觉得最奇怪的一个地方

使用道具 举报

回复
论坛徽章:
0
发表于 2009-8-19 13:18 | 显示全部楼层
in 语句换成exist吧  这样效率会高点  一般SQL语句优化中都会说到尽量不要用in

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2009-8-19 13:23 | 显示全部楼层
原帖由 Davizhang 于 2009-8-19 13:13 发表

having 中的字句在where中有,但是查出来的结果有些并没有进行过滤,无赖只好在having中再写一次
其实这也是我觉得最奇怪的一个地方





那只能说明, 这个语句写的有问题, 我认为那个subquery有可能完全可以改写, 但要有具体的环境!

从语法上来说, 你的这个语句having 中的字句的条件完全可以用where来替代, 并且用where效率会大大提高!


使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表