我有一个存储过程,它根据给定的文本搜索表中的行。 TableWithText
有一个类型为nvarchar的SomeText
列,还有一个CreateDate
DateTime
列,其中填充了创建该行的日期和时间。
存储过程的主体是:
SELECT TableWithTextID, SomeOtherColumn
FROM TableWithText
WHERE SomeText = @inputText
尽管没有施加这样的约束,但每个SomeText的值保证是唯一的。因此,该语句预计只返回一行。
然而,该表有大约500,000行。鉴于我知道我正在寻找的行(直到分钟),如果我添加
AND CreateDate >= @CreateDate
到存储过程,MS SQL查询优化器是否会在搜索输入文本之前将查询行数减少到@CreateDate之后创建的查询行数?
答案 0 :(得分:1)
最好的办法是查看执行计划并查看优化程序告诉您的内容。您可能只是通过查看查询和行数来确定存在问题,但实际成本非常低。
如果你已经在CreateDate上有一个索引,那么将它添加到where子句,它应该利用它。
否则,如果这是运行很多的东西并且在执行此操作时注意到全表扫描,那么最好将索引SomeText字段。我猜它是在其他查询中使用的两个,因为它是一个独特的东西?
答案 1 :(得分:0)
是的,可能,但只有在CreateDate列上添加索引(或SomeText,CreateDate上的索引)