I have a stored proc that searches for products (250,000 rows) using a full text index.
The stored proc takes a parameter that is the full text search condition. This pa
The first query plan looks straightforward:
CONTAINS(Name, @Filter)
The concatenation operator forms a union of two recordsets. So it looks like the second query is doing:
@Filter
. If correct, the constant scan resolves @Filter is not null
.CONTAINS(Name, @Filter)
A hash join trades memory for speed; if your system has enough memory, it's much faster than a loop join. This can easily explan a 10-100x slowdown.
One fix is to use two distinct queries:
if @Filter is null
SELECT TOP 100 ID FROM dbo.Products
else
SELECT TOP 100 ID FROM dbo.Products WHERE CONTAINS(Name, @Filter)