是否可以优化由列值预测的JOIN?

时间:2019-04-18 09:15:24

标签: sql-server query-optimization

我有2张桌子,像这样:

TableA
| ID | Index | Type        | Value       |
| 1  |     1 | 'DataPoint' | 'something' |
| 1  |     2 | 'DataPoint' | 'something' |
| 1  |     3 | 'Ref'       | 'something' |
| 2  |     1 | 'DataPoint' | 'something' |
| 2  |     2 | 'Ref'       | 'something' |


TableB
| ID | Index | Extra        |
| 1  |     3 | 'extra data' |
| 2  |     2 | 'extra data' |

我有这样的查询(在SP中):

SELECT A.ID, A.Index, A.Type, A.Value, B.Extra
FROM TableA A
LEFT JOIN TableB B ON A.ID = B.ID AND A.Index = B.Index 
Where ID = @inputID AND Index > @inputIndex

此查询用于实时应用程序,应尽可能快。我已将此查询确定为应用程序中最慢的查询之一。

仅当TableA的类型为'Ref'时,TableB才有数据。类型'Ref'并不常见,因此从程序上考虑,如果类型不是'Ref',查询可以跳过对TableB的检查,从而节省了一些时间。当然,我知道SQL不一定能那样工作。

SQL Server是否可以利用这一事实来优化查询? (或者,是否足够聪明,已经可以对上面的查询执行此操作?如果可以,我真的很好奇如何操作。)

0 个答案:

没有答案