Что вы можете сделать, это создать постоянные столбцы в обеих таблицах и проиндексировать их
ALTER TABLE Results ADD FixedPath AS REPLACE(
REPLACE(
REPLACE(
REPLACE([Resume], 'D:\documents\', '')
,'D:\CMT\Resumes\', '')
, 'internal_', '')
, 'monster_', '') PERSISTED
CREATE NONCLUSTERED INDEX ixResults_FixedPath ON Results (FixedPath) INCLUDE (...) WHERE (...)
INCLUDE
и, возможно, WHERE
вашего индекса будут зависеть от ваших запросов.
Если вы не хотите изменять таблицу, вы можете создать индексированное представление для обеих этих таблиц, а затем объединить представления.
CREATE VIEW v_Results
WITH SCHEMABINDING
AS
SELECT R.Id
-- , ... other columns ...
, REPLACE(
REPLACE(
REPLACE(
REPLACE(R.[Resume], 'D:\documents\', '')
,'D:\CMT\Resumes\', '')
, 'internal_', '')
, 'monster_', '') AS FixedPath
FROM dbo.Resume R
WHERE R.Email IS NOT NULL
AND R.Email <> ''
AND R.Postcode IS NOT NULL
AND R.Postcode <> ''
GO
Однако индекс здесь должен быть уникальным.
CREATE UNIQUE CLUSTERED INDEX ux ON dbo.v_Results (FixedPath, Id);
Создав оба этих представления, вы можете присоединиться к
SELECT ...
FROM v_Results R WITH (NOEXPAND)
JOIN v_ParsedCandidates PC WITH (NOEXPAND)
ON R.FixedPath = PC.FixedPath
NOEXPAND
подсказка не позволяет SQL Server расширить представление в базовый запрос. Смотрите здесь .