这两个查询之间是否存在性能差异。显然,应该在哪里保留用于查询表上的值以符合SQL 92的值,是否存在性能原因?
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 和
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 同样,这两个查询之间是否存在性能差异?
SELECT
Foo.FooId
FROM
Foo
WHERE
Foo.FooId IN
(
SELECT
Bar.FooId
FROM
Bar
WHERE
Bar.SomeField = 'SomeValue'
)和
SELECT
Foo.FooId
FROM
Foo
JOIN
Bar
ON
Bar.FooId = Bar.BarId
WHERE
Bar.SomeField = 'SomeValue'发布于 2009-03-06 16:22:34
通常,关于连接和性能的规则是这样的:首先使用on子句执行内部/外部/左/右/交叉连接,然后如果需要,使用WHERE子句进一步过滤数据。这样做效率更高的原因是表的大小。当您从两个表中选择并连接WHERE子句时,执行table_size_1 * table_size_2记录,然后应用WHERE子句来获得实际的连接。使用联接时,实际上首先限制记录,从而减小临时表的大小。大多数(如果不是全部) DBMSes都进行了优化,以处理WHERE上的联接。
我不确定XML数据对查询有什么影响,但对于实际的表连接,您的第二个示例更好。
https://stackoverflow.com/questions/619398
复制相似问题