2010-10-26 81 views
3

我有一个CHAR(250)列用作varchar(24)列的外键。在部分CHAR列上创建索引

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

我的问题是这样的:

是否可以使用SQL Server 2008上的索引视图索引列的子串,如果是的话,那就在桌子上的性能有任何副作用?

回答

5

您可以创建一个持久化计算列,那么指数就见Creating Indexes on Computed Columns

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

谢谢!但我忽略的是,所讨论的表格是第三方应用程序的一部分,因此更改表格本身是严格禁止的。 – 2010-10-26 23:43:31

+0

我不确定FK是否会从索引视图中受益。查询和连接*可能会从中受益,但FK实施本身可能会忽略您的索引视图,导致FK执行验证的性能不佳。 – 2010-10-26 23:54:03

+0

够公平的,我想我只能尝试一下。 – 2010-10-26 23:59:55

2

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

因此...

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

HTH。

+0

没有粘性关系的原因,这是一个决定,我的时间之前,我或多或少坚持。没有*实际* FK约束担心。它已经在同一台服务器上完全独立的数据库中。我有一个需要40分钟才能运行的存储过程,我主要关心。把这个领域的指数看起来似乎过大(〜400mb)。磁盘空间并不是那么重要,所以如果没有其他性能优势可言,我只是在浪费我的时间。 – 2010-10-28 04:41:17