我注意到,一旦我将联接添加到我的一些查询中,执行这些查询所花费的时间就不仅仅是完成多个查询了。
时间包括页面加载和平均超过 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/