0

我有一个从不更新且很少插入的表。我需要优化此表以快速查询日期列和 nvachar(32)。

我正在将索引添加到表中,我不确定将日期列拆分为单独的列是否对性能最好,例如年、月和日的单独列,或者只是保留日期列。

查询基本上将在 nvarchar 列和年列上,或者可能包括年、月和日。

我实际上要做的是在姓氏列和日期列上运行 SOUNDEX 子句

例如:

SELECT DISTINCT [Surname]
FROM [dbo].[sometable]
WHERE YEAR(Datecolumn) = 2011 AND SOUNDEX(Surname) = SOUNDEX('smith')

什么对性能最好?

4

2 回答 2

2

如果这就是您要执行过滤器的方式,那么索引是无用的,因为您正在将函数应用于这些列。对于DateColumn你可以做的

DateColumn >= '20110101' AND DateColumn < 20120101

如果确实需要,您还可以使用年份和月份创建计算列,并在这些列上创建索引。对于Surname我认为没有太多工作要做的专栏,SOUNDEX搜索会很慢,并且不会像您使用它那样使用索引。您仍然可以考虑使用SOUNDEX应用于 的函数的结果创建一个持久计算列,Surname在该列上创建一个索引并使用计算列进行过滤。这应该会加快您的查询速度。

于 2013-03-01T12:24:42.780 回答
0

对于日期时间列,您可以将 where 子句用作:

WHERE DateColumn BETWEEN '01/01/2011'  AND '01/01/2012'

但是,如果您要对 where 子句索引中的列进行任何操作,则毫无用处。我能提供的是将预先计算的 Surname 的 SOUNDEX 值存储在单独的列中

于 2013-03-01T12:25:57.553 回答