1

SQL Server 2008R2 を使用して、ここに簡単なクエリがあります。

SELECT *
FROM ItemData  
WHERE FREETEXT(Title, '"' + @OriginalSearchTerm + '"')   
AND  ( WebsiteID=@WebsiteID AND GeoCity = @GeoCity  AND GeoState = @GeoState )  
ORDER BY ItemListID DESC 

@GeoCityとに有効な値がある場合、これは問題ありません@GeoState。ただし、@GeoCity = -1および/または@GeoState = -1.

これらのケースに対して個別のクエリ全体を作成することは避けたいと思いますが、これは問題なく機能します。

これを行うために現在のクエリを最適化するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

0

-- これは、OR ステートメントが各 OR ステートメントに対してブロックを実行するため、より効率的である可能性があります。

SELECT *
FROM ItemData  
WHERE FREETEXT(Title, '"' + @OriginalSearchTerm + '"')   
AND  ( WebsiteID=@WebsiteID AND 
    (GeoCity = ISNULL(@GeoCity,-1)) AND
    (GeoState = ISNULL(GeoState,-1))
ORDER BY ItemListID DESC 
于 2012-08-09T12:30:58.523 に答える
0

@GeoCity = -1および/またはのときにクエリで何をしたいのかわかりません@GeoState = -1GeoCity = @GeoCityその場合にand/or条件を除外すると仮定するとGeoState = @GeoState、クエリは次のようになります。

SELECT *
FROM ItemData  
WHERE FREETEXT(Title, '"' + @OriginalSearchTerm + '"')   
AND  ( WebsiteID=@WebsiteID AND 
    (@GeoCity = -1 OR GeoCity = @GeoCity)  AND
    (@GeoState = -1 OR GeoState = @GeoState) )  
ORDER BY ItemListID DESC 
于 2012-08-07T16:02:31.940 に答える