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