如何优化多表联合查询速度?

hellomyCSharp 2013-08-12 05:54:40
一个update联合了10个表,平均每个表数据大约2万行,关联的字段已经建立了索引,但是查询依旧较慢,时间为62秒。上面要求优化到5秒以下,我就想骂人:我认为,数据量在50万,甚至百万以下的系统,但凡查询需要关联6个表以上的数据库设计,(也可能涉及到软件设计)都是狗屎。更何况是逻辑简单的小系统。

但我无能为力,也可能是孤陋寡闻,无论如何,只能按时完成任务,求高手指教优化方法!
...全文
10678 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Phoozyan 2013-08-15
  • 打赏
  • 举报
回复
那些整天在别人问题之外以说唱教授身份出现的角色,然后以针砭时弊或愤世嫉俗的姿态叫叫嚷嚷,其实并没有给你什么帮助。因为,当你说法律,他和你谈经济,当你说工作,他和你扯事业。

所以,对于善于跑题的叫兽们,作为寻求真实客观问题的求问者,最好置之不理。


你这个问题可以如此考虑,
一般情况下:
根据sql2005的display estimated execution plan:


查找出比较耗时的节点,如果不是索引查询(index seek,注意(index scan)不是索引查询,依旧是全表遍历(table scan)!),那么就先针对关联的字段建立索引.如果已是索引查询,参考下图:


如果这样还没起到效果,则可能是你要查询的结果数据量比较大,建议参考caozhy 版主所说的分表分库、使用数据缓存等。
hellomyCSharp 2013-08-13
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
如果不“推到了重新设计”,而你的问题如果可以模式化地解决的话,那么我认为你可以把你的模式推广到各个国营企业计算中心去了,一定可以出名。 因此你的问题描述具有普遍性,我们经常看到那些原本用3万块钱就能搞定的计算,用80万元买来的小型机也要比人家计算速度慢20倍,而这些人还天天嚷着要增加机器否则年底就无法再支持业务报表了。 如果你的问题可以按照某种模式来统一解决,那么可以去宣传一下。
顶起,问题是我并没有解决思路,不过对于你说说的这种现象,我十分赞同。
  • 打赏
  • 举报
回复
如果不“推到了重新设计”,而你的问题如果可以模式化地解决的话,那么我认为你可以把你的模式推广到各个国营企业计算中心去了,一定可以出名。 因此你的问题描述具有普遍性,我们经常看到那些原本用3万块钱就能搞定的计算,用80万元买来的小型机也要比人家计算速度慢20倍,而这些人还天天嚷着要增加机器否则年底就无法再支持业务报表了。 如果你的问题可以按照某种模式来统一解决,那么可以去宣传一下。
  • 打赏
  • 举报
回复
当精竭虑 --> 殚精竭虑 我见过的最垃圾的sql查询都是国营企业的计算中心的人编写的,他们根本不管什么效率,一律用许多个表进行关联,稍微技术好一点的人懂得笛卡尔积不好应该使用inner join和建立索引。 这种“一次性”编写代码的做法最“没有压力”啊,他们才懒得对于“中间层次”动脑筋进行设计呢。而且设计了,也没有人负责啊。 其实他们是国营企业惯出来的,我们已经没有办法。
ACMAIN_CHM 2013-08-12
  • 打赏
  • 举报
回复
添加必要的索引。
  • 打赏
  • 举报
回复
“上面”要你重构整个设计。而你只想轻松“无压力”地用几秒钟的从csdn上抄来的代码来搞定? 要自己动手设计,你就要当精竭虑。可能你这个帖子解决不了这个问题啊。
rtdb 2013-08-12
  • 打赏
  • 举报
回复
优化SQL吧。亮一下你现在的SQL指令。
threenewbee 2013-08-12
  • 打赏
  • 举报
回复
分表分库、缓存等等。要具体根据你的需求分析。 用sql profiler看下性能瓶颈在哪里。
全栈极简 2013-08-12
  • 打赏
  • 举报
回复
单表查询出DataTable(这个你要设计一下,究竟分成哪几个DataTable比较合理),然后在内存当中关联出最终结果。思路就是用空间换时间。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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