Можно ли оптимизировать JOIN, предсказываемое значением столбца? - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть две таблицы, например, так:

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-сервер использовал этот факт для оптимизации запроса?(Или это достаточно разумно, чтобы сделать это уже с моим запросом выше? Если это так, мне действительно интересно, как.)

...