gau*_*v b 2 sql sql-server ssis sql-server-2008
我被要求对一个 SQL Server 查询进行性能调优,该查询中有很多连接。
例如
LEFT JOIN
vw_BILLABLE_CENSUS_R CEN ON DE.Client = CEN.Client
AND CAL.REPORTING_MONTH = CEN.REPORTING_MONTH
Run Code Online (Sandbox Code Playgroud)
几乎有 25 个列vw_Billing_Cenus_R,但我们只想使用其中的 3 个。所以我想知道,如果我只选择所需的列,然后像这样执行联接,而不是从视图或表中选择所有列
LEFT JOIN (SELECT [Column_1], [Column_2], [Column_3]
FROM vw_BILLABLE_CENSUS_R) CEN ON DE.Client = CEN.Client
AND CAL.REPORTING_MONTH = CEN.REPORTING_MONTH
Run Code Online (Sandbox Code Playgroud)
那么这会提高性能吗?
重要的部分是您在最外面实际使用的列SELECT,而不是选择加入的列。SQL Server引擎足够聪明,能够意识到如果不需要的话,他不需要从引用的表(或视图)中检索所有列。
因此以下两个查询应该产生完全相同的查询执行计划:
SELECT
A.SomeColumn
FROM
MyTable AS A
LEFT JOIN (
SELECT
*
FROM
OtherTable AS B) AS X ON A.SomeColumn = X.SomeColumn
SELECT
A.SomeColumn
FROM
MyTable AS A
LEFT JOIN (
SELECT
B.SomeColumn
FROM
OtherTable AS B) AS X ON A.SomeColumn = X.SomeColumn
Run Code Online (Sandbox Code Playgroud)
区别在于您是否实际使用所选列(在条件 where 或实际检索值中),如下所示:
SELECT
A.SomeColumn,
X.* -- * has all X columns
FROM
MyTable AS A
LEFT JOIN (
SELECT
B.*
FROM
OtherTable AS B) AS X ON A.SomeColumn = X.SomeColumn
SELECT
A.SomeColumn,
X.* -- * has only X's SomeColumn
FROM
MyTable AS A
LEFT JOIN (
SELECT
B.SomeColumn
FROM
OtherTable AS B) AS X ON A.SomeColumn = X.SomeColumn
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1168 次 |
| 最近记录: |