在部分CHAR列上创建索引

时间:2010-10-26 23:31:27

标签: sql tsql sql-server-2008 query-tuning

我有一个CHAR(250)列用作varchar(24)列的外键。

在MySQL中我记得我可以创建一个指定列(24)的索引,以便在最左边的24个字符上创建索引。这在MS SQL Server上似乎不可能。

我的问题是:

是否可以在SQL Server 2008上使用索引视图来索引该列的子字符串,如果是,它是否会对表的性能产生任何副作用?

2 个答案:

答案 0 :(得分:7)

您可以创建一个持久计算列,然后将其编入索引,请参阅Creating Indexes on Computed Columns

alter table add newcolumn as cast(oldcolumn as varchar(24)) persisted;
create index table_newcolumn on table (newcolumn);

答案 1 :(得分:2)

我希望你有一个很好的关系理由这样做。我猜测供应商提供的表的前24个字符实际上构成了一个离散属性,并且应该首先在一个单独的列中。

所以......

创建供应商表的视图。如果你愿意,请索引它。我怀疑你可以在视图中指出一个FK约束,但你当然可以写一个触发器来达到同样的效果。对索引视图进行检查的触发器将非常快,代价是视图基表上的更新时间略有增加。

HTH。