我有一个CHAR(250)列用作varchar(24)列的外键。
在MySQL中我记得我可以创建一个指定列(24)的索引,以便在最左边的24个字符上创建索引。这在MS SQL Server上似乎不可能。
我的问题是:
是否可以在SQL Server 2008上使用索引视图来索引该列的子字符串,如果是,它是否会对表的性能产生任何副作用?
答案 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。