У меня есть две таблицы, например, так:
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
Этот запрос используется в приложении реального времени и долженбудь как можно быстрее.Я определил этот запрос как один из самых медленных в моем приложении.
У TableB есть данные только тогда, когда тип TableA равен 'Ref'
.Тип 'Ref'
не является обычным явлением, поэтому с процедурной точки зрения запрос может пропустить проверку TableB, если тип не равен 'Ref'
, и сэкономить некоторое время.Конечно, я знаю, что SQL не обязательно работает таким образом.
Возможно ли, чтобы SQL-сервер использовал этот факт для оптимизации запроса?(Или это достаточно разумно, чтобы сделать это уже с моим запросом выше? Если это так, мне действительно интересно, как.)