首页
学习
活动
专区
圈层
工具
发布

SQL优化
EN

Stack Overflow用户
提问于 2009-03-06 16:17:39
回答 1查看 237关注 0票数 0

这两个查询之间是否存在性能差异。显然,应该在哪里保留用于查询表上的值以符合SQL 92的值,是否存在性能原因?

代码语言:javascript
复制
SELECT
  Foo.FooId
  (
    SELECT
      Bar.BarId
    FROM
      Bar
    WHERE
      Bar.FooId = Foo.FooId
    FOR XML PATH('Bar'), TYPE 
  ) As 'Bar'
  FROM
    Foo
  FOR XML PATH('Foo'), TYPE 

代码语言:javascript
复制
SELECT
  Foo.FooId
  (
    SELECT
      Bar.BarId
    FROM
      Bar
    JOIN
      Foo
    ON
      Foo.FooId = Bar.FooId
    FOR XML PATH('Bar'), TYPE 
  ) As 'Bar'
  FROM
    Foo
  FOR XML PATH('Foo'), TYPE 

同样,这两个查询之间是否存在性能差异?

代码语言:javascript
复制
SELECT
  Foo.FooId
FROM
  Foo
WHERE
  Foo.FooId IN
  (
    SELECT
      Bar.FooId
    FROM
      Bar
    WHERE 
      Bar.SomeField = 'SomeValue'
  )

代码语言:javascript
复制
SELECT
  Foo.FooId
FROM
  Foo
JOIN
  Bar
ON 
  Bar.FooId = Bar.BarId
WHERE
  Bar.SomeField = 'SomeValue'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-06 16:22:34

通常,关于连接和性能的规则是这样的:首先使用on子句执行内部/外部/左/右/交叉连接,然后如果需要,使用WHERE子句进一步过滤数据。这样做效率更高的原因是表的大小。当您从两个表中选择并连接WHERE子句时,执行table_size_1 * table_size_2记录,然后应用WHERE子句来获得实际的连接。使用联接时,实际上首先限制记录,从而减小临时表的大小。大多数(如果不是全部) DBMSes都进行了优化,以处理WHERE上的联接。

我不确定XML数据对查询有什么影响,但对于实际的表连接,您的第二个示例更好。

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

https://stackoverflow.com/questions/619398

复制
相关文章

相似问题

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