我注意到,当我在一些查询中添加联接时,执行这些查询所花费的时间不仅仅是完成多个查询。
时间包括页面加载和平均超过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排序。
发布于 2009-02-28 16:54:59
如果你无缘无故地加入,当然。通常,您加入表的原因是能够提取相关数据并处理它。上面的问题也没有考虑到需要将数据重新组合在一起的编程时间(可能是通过循环结构之类的方式)。
查询分析应该是这里的第一步。我不太熟悉您对SQL的特殊风格,但它可能类似于解释。
如果我必须根据这里有限的信息给出一个可能的罪魁祸首,那就是缺少索引。您要加入的字段是否已正确索引?这可以获得巨大的性能收益。第二,你是否加入了合适的领域?例如,如果将两个字符串连接在一起,那么您的性能将比加入整数或其他优化字段差得多。
发布于 2009-02-28 17:01:40
不,你应该试着走另一条路。您应该尽量少查询。如果做的正确,这是最快的。
检查表上是否有适当的索引。例如,对于这样的查询:
select a.Some, b.Other
from TableA a
inner join TableB b on b.Id = a.Id您应该确保TableB.Id字段上有一个索引。表的主键通常在默认情况下获得索引,但其他索引必须自己创建。
发布于 2009-02-28 16:58:10
我建议您查看实际的查询计划,并了解响应差异的原因。也许它会突出显示一个表格扫描建议,或者添加一个索引?
做连接要花费更多。但这并不意味着你不应该使用它们。
将有助于查看您正在编写的SQL .(由LINQ生成)
https://stackoverflow.com/questions/598288
复制相似问题