sql - 多个查询以避免连接?

标签 sql linq-to-sql

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

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

7-9 个没有连接的查询
159ms

3 个查询有 2 个连接
235ms

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

编辑

为了这个问题,我会创建一些虚假信息。

表对象
ID(整数、身份、PK、聚集索引)
用户 ID(整数,非聚集索引)
CategoryID(整数,非聚集索引)

表用户
ID(整数、身份、PK、聚集索引)

表格类别
ID(整数、身份、PK、聚集索引)

很简单。这是对 Objects 表的双重内连接查询。分别查询所有 3 个似乎比连接更快。

连接的查询计划显示 2 次聚集索引搜索完成了 42%,23% 是聚集索引扫描,其余的是前 N 排序。

最佳答案

如果你无缘无故地加入,当然可以。通常,您加入表的原因是能够提取相关数据并进行处理。您上面的问题也没有考虑到您需要将这些数据拉回到一起的编程时间(可能通过循环结构或类似的东西)。

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

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

关于sql - 多个查询以避免连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/598288/

相关文章:

c# - TransactionScope在某些地方有效,而在另一些地方无效

mysql - 如何将 MySQL 中不明确的别名解析为当前表的定义

SQL 原子增量和锁定策略 - 这安全吗?

c# - 将显示的查询/子查询转换为分组依据?

.net - 从 Linq To Sql 中的匿名类型查询获取单个结果

linq-to-sql - 如何以索引方式有效地存储所有 OpenStreetMap 数据?

c# - 使用 LinqDataSource 格式化问题的下拉列表

php - SQL/PHP - 在 PHP 中从 UNION 获取表名

sql - Redshift 的时差

sql - 行组内的ssrs列可见性