首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Select语句性能

Select语句性能
EN

Stack Overflow用户
提问于 2009-11-06 07:05:40
回答 4查看 294关注 0票数 2

我正在执行的select语句出现了性能问题。

这就是它:

代码语言:javascript
复制
SELECT     Material.*
FROM       Material 
INNER JOIN LineInfo ON Material.LineInfoCtr = LineInfo.ctr 
INNER JOIN Order_Header ON LineInfo.Order_HeaderCtr = Order_Header.ctr
WHERE   (Order_Header.jobNum = 'ttest') 
    AND (Order_Header.revision_number = 0) 
    AND (LineInfo.lineNum = 46)

根据服务器负载的不同,该语句的执行时间为5-10秒。

一些表统计信息:

代码语言:javascript
复制
- Material has 2,030,xxx records.
- Lineinfo has 190,xxx records
- Order_Header has 2,5xx records.

我的语句总共返回18行,包含大约20-25个数据字段。返回单个字段或返回所有字段都没有区别。这是典型的性能吗?我能做些什么来改进它吗?

我试着使用sub select来检索外键,IN子句,我发现了一个帖子,一个家伙说使用left outer join帮助了他。对我来说,它们都产生相同的5到10秒的执行时间。

这是通过MS SQL management studio访问的MS SQL server 2005。时间是查询分析器中经过的时间。

有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-06 07:13:44

您应该做的第一件事是analyze the query plan,以查看SQL Server正在使用什么索引(如果有的话)。

在这个查询中,您可能会从一些covering indexes中受益,因为您只将LineinfoOrder_Header中的列用于连接和查询限制( WHERE子句)。

票数 2
EN

Stack Overflow用户

发布于 2009-11-06 07:14:54

我在您的查询中看不到任何特殊之处,因此,如果索引是正确的,那么它的执行速度应该比这快得多,行数不是很高。

在查询中涉及的表上是否有索引,以及是否尝试使用查询分析器的“显示执行计划”选项。基本上,您需要运行查询,在执行计划中循环,并添加索引,以便看不到任何全表扫描操作。

如果您从SQL Management studio运行,那么您可以选择自动调优查询,添加索引,但我建议您尝试自己优化,以便更好地理解您正在做什么。

问候马西莫

票数 1
EN

Stack Overflow用户

发布于 2009-11-06 07:47:47

它不会影响性能,但不要编写像"SELECT * FROM X“这样的查询。避免使用星号符号,并拼写出各个列。调用此方法的代码仍将以这种方式工作,即使通过添加列更改了架构。

索引是这里的关键,正如其他人已经说过的那样。

WHERE子句的顺序可能会有所帮助。首先执行消除考虑的最大行数的那一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1684288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档