首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个查询以避免联接?

多个查询以避免联接?
EN

Stack Overflow用户
提问于 2009-02-28 16:50:11
回答 6查看 12K关注 0票数 4

我注意到,当我在一些查询中添加联接时,执行这些查询所花费的时间不仅仅是完成多个查询。

时间包括页面加载和平均超过20页负载。

7-9没有联接的查询

159

3个带有2个联接的查询

235

考虑到这些查询似乎对性能有如此重大的影响,我是否应该继续进行多个查询而不是连接?我甚至可以优化多个查询方法,因为在这些测试中,我甚至懒得加载。

编辑

为了这个问题,我会编造一些错误的信息。

表对象

ID (int,identity,PK,聚集索引)

UserID (int,非聚集索引)

CategoryID (int,非聚集索引)

表用户

ID (int,identity,PK,聚集索引)

表类别

ID (int,identity,PK,聚集索引)

很简单。它是对象表上的一个双内连接查询。单独查询所有三个似乎比连接更快。

连接的查询计划显示,对于2个聚集索引查找完成了42%的查询,23%为聚集索引扫描,其余为Top排序。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-02-28 16:54:59

如果你无缘无故地加入,当然。通常,您加入表的原因是能够提取相关数据并处理它。上面的问题也没有考虑到需要将数据重新组合在一起的编程时间(可能是通过循环结构之类的方式)。

查询分析应该是这里的第一步。我不太熟悉您对SQL的特殊风格,但它可能类似于解释。

如果我必须根据这里有限的信息给出一个可能的罪魁祸首,那就是缺少索引。您要加入的字段是否已正确索引?这可以获得巨大的性能收益。第二,你是否加入了合适的领域?例如,如果将两个字符串连接在一起,那么您的性能将比加入整数或其他优化字段差得多。

票数 6
EN

Stack Overflow用户

发布于 2009-02-28 17:01:40

不,你应该试着走另一条路。您应该尽量少查询。如果做的正确,这是最快的。

检查表上是否有适当的索引。例如,对于这样的查询:

代码语言:javascript
复制
select a.Some, b.Other
from TableA a
inner join TableB b on b.Id = a.Id

您应该确保TableB.Id字段上有一个索引。表的主键通常在默认情况下获得索引,但其他索引必须自己创建。

票数 4
EN

Stack Overflow用户

发布于 2009-02-28 16:58:10

我建议您查看实际的查询计划,并了解响应差异的原因。也许它会突出显示一个表格扫描建议,或者添加一个索引?

做连接要花费更多。但这并不意味着你不应该使用它们。

将有助于查看您正在编写的SQL .(由LINQ生成)

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

https://stackoverflow.com/questions/598288

复制
相关文章

相似问题

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