各位帮我看看这个SQL语句质量怎么样?

绝版小龙女 2013-08-07 03:46:57
这个SQL语句还有哪些地方需要作优化的?请帮忙指出来,谢谢!

select distinct a.Com_ID,a.Com_Name,a.Com_Delegate,a.Com_ComCode,a.Pro_Receipts, 
Com_IsCetifYezz,Com_IsCetifYzz,Com_IsCetifWghcd,Com_IsCetifghcp,Com_IsCetifCk,Com_IsCetifZm,
Com_IsCetifHaccp,Com_IsCetifIso,Com_IsCetifGreen,Com_ShowOrder,
s1.V_Text As Com_QYXZ, --企业性质
s2.V_Text As Com_AuditorStatus --核查状态
From Wat_ComInfo a
Left Join sys_FieldValue s1 on s1.V_Code = a.Com_QYXZ_Dic and s1.V_F_Key = 'ComQYXZKey' --企业性质
Left Join sys_FieldValue s2 on s2.V_Code = a.Com_AuditorStatus_Dic and s2.V_F_Key = 'ComAuditorStatusKey' --核查状态
Left Join Wat_FarmCertificate f on f.Com_ID = a.Com_ID --养殖证
Left Join Wat_ProComRelation c on c.Com_ID = a.Com_ID --产品与企业关系表
left join Wat_ProductInfo d on d.Pro_ID=c.Pro_ID
Where Com_NewOldStatus_Dic='1'
and Com_AreaCode in(
select f.AreaCode from Wat_OrgRole f
join Wat_OrgInfo e on e.Org_ID=f.Org_ID
join org_user g on e.Org_Name=g.U_UnitName
where g.UserID='1')
...全文
165 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-08-08
  • 打赏
  • 举报
回复
引用 7 楼 u010900359 的回复:
[quote=引用 1 楼 DBA_Huangzj 的回复:] 看的有点乱,Wat_OrgRole这个表一共出现了3次,看看有没有必要减少关联的次数。另外你的代码筛选性不强,大数据量会受不了的
代码筛选性不强 是什么意思?[/quote]如果一列,假设有100万数据,你要找的数据有90万都符合条件那筛选性就非常低,如果只有9条,那非常高
绝版小龙女 2013-08-08
  • 打赏
  • 举报
回复
引用 2 楼 ap0405140 的回复:
不知表数据量,数据发布,索引情况等信息,没法帮你优化喔. 建议看执行计划,看哪个环节成本比较大,针对性的优化..
执行计划在哪里看的?不懂这个,每页显示10条记录,加载时需要3到4秒钟。
绝版小龙女 2013-08-08
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
看的有点乱,Wat_OrgRole这个表一共出现了3次,看看有没有必要减少关联的次数。另外你的代码筛选性不强,大数据量会受不了的
代码筛选性不强 是什么意思?
chen357313771 2013-08-08
  • 打赏
  • 举报
回复
把WHERE条件中IN的部分JOIN吧,效果会好些
绝版小龙女 2013-08-08
  • 打赏
  • 举报
回复
引用 2 楼 ap0405140 的回复:
不知表数据量,数据发布,索引情况等信息,没法帮你优化喔. 建议看执行计划,看哪个环节成本比较大,针对性的优化..
Wat_ComInfo 这个主表的数据有4万多,子表Wat_FarmCertificate有5万多,其他表的数据不多。
KeepSayingNo 2013-08-08
  • 打赏
  • 举报
回复
楼主没必要优化,在4,5万的数据量下,这个SQL是完全OK的,要优化就把in那一部分换成exists子查询
Shawn 2013-08-07
  • 打赏
  • 举报
回复
这个SQL,只能从索引上来做优化,还有那个IN语句。请楼主给有每个字段前加别名限制,并给出各张表的数据量情况。
SELECT DISTINCT
        a.Com_ID ,
        a.Com_Name ,
        a.Com_Delegate ,
        a.Com_ComCode ,
        a.Pro_Receipts ,
        Com_IsCetifYezz ,
        Com_IsCetifYzz ,
        Com_IsCetifWghcd ,
        Com_IsCetifghcp ,	--请说明这个字段属于哪张表.比如 a.Com_IsCetifghcp?
        Com_IsCetifCk ,
        Com_IsCetifZm ,
        Com_IsCetifHaccp ,
        Com_IsCetifIso ,
        Com_IsCetifGreen ,
        Com_ShowOrder ,
        s1.V_Text AS Com_QYXZ , --企业性质
        s2.V_Text AS Com_AuditorStatus --核查状态
FROM    Wat_ComInfo a
        LEFT JOIN sys_FieldValue s1 
			ON s1.V_Code = a.Com_QYXZ_Dic
				AND s1.V_F_Key = 'ComQYXZKey' --企业性质
        LEFT JOIN sys_FieldValue s2 
			ON s2.V_Code = a.Com_AuditorStatus_Dic
				AND s2.V_F_Key = 'ComAuditorStatusKey' --核查状态
        LEFT JOIN Wat_FarmCertificate f 
			ON f.Com_ID = a.Com_ID --养殖证,请说出表中的数据量?
        LEFT JOIN Wat_ProComRelation c 
			ON c.Com_ID = a.Com_ID --产品与企业关系表
        LEFT JOIN Wat_ProductInfo d 
			ON d.Pro_ID = c.Pro_ID
WHERE   Com_NewOldStatus_Dic = '1'
        AND Com_AreaCode IN 	--请说明这个字段属于哪张表.比如 a.Com_AreaCode?
		(
			SELECT  f.AreaCode
			FROM    Wat_OrgRole f
					JOIN Wat_OrgInfo e 
						ON e.Org_ID = f.Org_ID
					JOIN org_user g 
						ON e.Org_Name = g.U_UnitName
			WHERE   g.UserID = '1' 
		)
kobemadi 2013-08-07
  • 打赏
  • 举报
回复
表的名字好长
唐诗三百首 2013-08-07
  • 打赏
  • 举报
回复
不知表数据量,数据发布,索引情况等信息,没法帮你优化喔. 建议看执行计划,看哪个环节成本比较大,针对性的优化..
發糞塗牆 2013-08-07
  • 打赏
  • 举报
回复
看的有点乱,Wat_OrgRole这个表一共出现了3次,看看有没有必要减少关联的次数。另外你的代码筛选性不强,大数据量会受不了的

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧