sql优化,头疼啊,菜鸟虚心请教,求指导! 100liuxibei1987]

发布时间:2017-3-24 8:05:54 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"sql优化,头疼啊,菜鸟虚心请教,求指导! 100liuxibei1987]",主要涉及到sql优化,头疼啊,菜鸟虚心请教,求指导! 100liuxibei1987]方面的内容,对于sql优化,头疼啊,菜鸟虚心请教,求指导! 100liuxibei1987]感兴趣的同学可以参考一下。

先说说情况,一个网站,一台服务器,一天流量差不多8000到1万独立ip。 服务器inter双核cpu,4G内存 。 目前服务器cpu使用一直从90%+到100%波动,网站速度很慢。看了下最主要就是两个进程 一个是iis的,一个是sql的,然后老板让处理下。 这网站不是我做的,我过来之前几个人已经开发完毕,然后就走人了,我过来维护。 这个情况朋友告诉我先弄下sql吧,从程序开始优化。用sql跟踪一下发现这样的情况,我不知道cpu reads这些是以什么为单位的,不过数值这么大肯定有问题咯 像这样的sql还有不少,应该都需要优化吧 还有在活动监视器里发现不少sql进程阻塞。。。。 我先贴一个sql出来大家看看 select e.EshowName,e.id,e.IsJingTai,e.StartTime,g.ChGName,g.Id as CGId,d.Ding,d.Cai,e.zhangshangadd,(select count(1) from TEshowPic where EshowPicTypeNo=1 and TEshowNo=e.id ) as tucount from TEshow e  left join TChangGuan g on e.TChangGuanno=g.id left join TDingCai d on d.ParentNo=e.id where e.id in (select e.id from (select e.id from (select top 0 e.id from TEshow e left join TChangGuan g on  e.TChangGuanno=g.id left join TDingCai d on d.ParentNo=e.id where  e.IsTag=1 and e.DelTag=0 and e.TBigSortNo=1  and (d.TypeNo=1 or d.TypeNo is null) and  e.userno=1  and  datediff(d,getdate(),StartTime)<=0 and e.SysCityNo=1 and e.TSmallSort like '%装备制造业%'order by e.StartTime desc,e.id desc) as e union all select * from (select top 26 e.id from TEshow e left join  TChangGuan g on e.TChangGuanno=g.id left join TDingCai d on d.ParentNo=e.id where  e.IsTag=1 and e.DelTag=0 and e.TBigSortNo=1  and (d.TypeNo=1 or d.TypeNo is null) and  e.userno=1  and  datediff(d,getdate(),StartTime)<=0 and e.SysCityNo=1 and e.TSmallSort like '%装备制造业%'order by e.StartTime desc,e.id desc) as b ) e group by e.id having count(e.id)=1 ) order by e.StartTime desc,e.id  desc 这句就是图中的那句sql

图挂了

建议你提供详细的资料: 例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。 这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。

这么多子查询,先把子查询放在临时表里 然后再从临时表里取数据

首先膜拜一下写这个代码的人 

写这么长的代码的人都是坑爹的

我先整理下弄下表结构以及测试数据,大家先吃午饭吧。我弄好了,下午发上来,大家帮忙看看 图挂了,先补张图

--这样看着累不累?? select  e.EshowName,e.id,e.IsJingTai,e.StartTime,g.ChGName,g.Id as CGId,d.Ding,d.Cai,e.zhangshangadd,  (select count(1) from TEshowPic where EshowPicTypeNo=1 and TEshowNo=e.id ) as tucount from TEshow e  left join  TChangGuan g on e.TChangGuanno=g.id  left join  TDingCai d on d.ParentNo=e.id  where  e.id  in  (select       e.id      from        (select            e.id         from (select  top 0 e.id   from      TEshow e left join TChangGuan g on e.TChangGuanno=g.id left join TDingCai d on d.ParentNo=e.id   where      e.IsTag=1 and e.DelTag=0 and e.TBigSortNo=1  and (d.TypeNo=1 or d.TypeNo is null) and  e.userno=1    and  datediff(d,getdate(),StartTime)<=0 and e.SysCityNo=1 and e.TSmallSort like '%装备制造业%'order by e.StartTime desc,e.id desc) as e  union all  select     *    from     (select          top 26 e.id       from         TEshow e       left join         TChangGuan g on e.TChangGuanno=g.id left join TDingCai d on d.ParentNo=e.id       where         e.IsTag=1 and e.DelTag=0 and e.TBigSortNo=1  and (d.TypeNo=1 or d.TypeNo is null) and  e.userno=1        and    datediff(d,getdate(),StartTime)<=0 and e.SysCityNo=1       and e.TSmallSort like '%装备制造业%'order by e.StartTime desc,e.id desc) as b ) e  group by     e.id  having     count(e.id)=1 )  order by     e.StartTime desc,e.id desc

说实话,这样看着也够雷人的引用 7 楼 fredrickhu 的回复:SQL code --这样看着累不累?? select  e.EshowName,e.id,e.IsJingTai,e.StartTime,g.ChGName,g.Id as CGId,d.Ding,d.Cai,e.zhangshangadd,  (select count(1) from TEshowPic where EshowPicTypeNo=1 and TEshowNo=e.id……

o(∩_∩)o 哈哈         刘西北

该回复于2011-10-08 13:31:54被版主删除

恩,我查看了下源码,这是一个分页sql。我把查询字段和查询条件过滤后是这样的了,大家在帮忙看看 select *    from  table     where  id  in (       select  id  from (           select  id  from  (select top size*(page-1) id  from     table  where ..  order .. ) as a           union all           select * from (select top  size*page id  from  table ..  where order .. ) as b       ) a group by  id  having count( id )=1 )  order .. 这个分页sql是不是很坑爹

如果使用存储过程是不是会好点

原来dba就是干的擦屁股的活

引用 7 楼 fredrickhu 的回复:SQL code --这样看着累不累?? select  e.EshowName,e.id,e.IsJingTai,e.StartTime,g.ChGName,g.Id as CGId,d.Ding,d.Cai,e.zhangshangadd,  (select count(1) from TEshowPic where EshowPicTypeNo=1 and TEshowNo=e.id )…… 这代码确实够牛...

引用 12 楼 liuxibei1987 的回复:如果使用存储过程是不是会好点 必须的啊 存储过程多好的

引用 14 楼 orchidcat 的回复:引用 7 楼 fredrickhu 的回复: SQL code --这样看着累不累?? select e.EshowName,e.id,e.IsJingTai,e.StartTime,g.ChGName,g.Id as CGId,d.Ding,d.Cai,e.zhangshangadd, (select count(1) from TEshowPic where EshowPicTy……  恩,我把这个过滤了,在11楼,大侠帮忙看看这个语句本身效率如何,还有楼上有说过把子查询放到临时表里怎么做比较好呢

我擦  这SQL牛逼

先换存储过程吧,网站里的分页先全换成存储过程。 刚在csdn搜到大乌龟兄发出来的几个存储过程先用用看,分页存储过程 然后继续优化

分页已经用存储过程替换了。 现在第二个问题又来,望各位大侠指导。 create table #user( id int identity(1, 1) PRIMARY KEY, username nvarchar(20) ) create table #pic ( id int identity(1, 1) PRIMARY KEY, userid int, pic nvarchar(100) ) create table #news( id int identity(1, 1) PRIMARY KEY, userid int, newname nvarchar(100) ) declare @i int; set @i=1; while(@i<100) begin insert into #user values ('张三'); insert into #pic (userid,pic) values (1,'1.jpg'); insert into #news (userid,newname) values (@i,'新闻') set @[email protected]+1; end select e.id,n.id,n.newname,(select count(0) from #pic where userid=e.id ) as piccount from #user e inner join #news n on e.id=n.userid where e.id<100 关于查询时的逻辑读取次数对系统的性能影响大吗,如果有影响就要优化。 看下这个sql就是查询符合条件的用户发的新闻,然后每条数据里要带上这个用户发布的图片数量. 就这么一句sql,但是这几个表都有10几万条数据,查询下来只有20条数据,但是逻辑读取次数切有65万次 其中图片表就逻辑读取了64万次。查询20条数据就读取这么多次,这个应该算不正常吧

select USERID,count(0) AS piccount  INTO #PICSTA from #pic  WHERE USERid<100 GROUP BY userid select e.id,n.id,n.newname,P.piccount  from #user e inner join #news n on e.id=n.userid  LEFT JOIN #PICSTA P ON E.ID = P.USERID where e.id<100

这个分步做肯定能提高很多性能

这个... 写这个代码的人肯定是个牛人..

引用 21 楼 nbdba 的回复:这个分步做肯定能提高很多性能 第一步逻辑读取4万次,第二步6000次 分成两步逻辑读取从65万次降低到4万6性能应该是提高不少。 现在还有一些疑问,多用户同时查询时不会有影响吧,查询结束后需要删除临时表吗?

看了牛人写的代码,才庆幸自己哦

请教LZ,你在6楼发的图片是哪里看的,我很想知道————初级的初级菜鸟

引用 25 楼 zenguy 的回复:请教LZ,你在6楼发的图片是哪里看的,我很想知道————初级的初级菜鸟 是通过 SQL Server Profiler 收集的!

楼主的问题我前段时间也遇到过,当时主要是优化查询脚i、本,方法就是建一些索引和索引的优化。看楼主目前的状况,应该是先优化查询脚本了!不知道楼主的MSSQL是什么版本,2005以上对于优化有很多的工具可以使用!

应用程序用复杂 sql 都有效率的问题,别说网站了 ,建议 改称小的程序.有时 sql server 优化器 不是很好,效率不是很高.建议写一写短小的程序 处理.

上一篇:想提取字符,请高手指教 40siw_28]
下一篇:SQL排序 40Alice814108771]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款