2010-09-28 49 views
3

我在查询一个包含所有有效日期时间的varchar列。在查询中,我将该列转换为datetime。有什么办法将varchar列索引为日期时间?

请记住,将列的数据类型定义更改为datetime不是一个选项。相信我,这不是一个选择。

通过查询分析,我发现查询会更快,如果我可以在此列上添加索引。但它是varchar。如果我添加了一个索引,它会根据它的varchar值进行索引,对吗?但是我想让它在日期时间值上索引,是的?

有什么我可以在这里做索引?

回答

6

有效数据是第一优先级,因为任何将数据转换为DATETIME的方法将在午夜时间返回1900年1月1日的值,此时值与接受的格式不匹配。

SQL Server没有基于函数的索引,那么你的选择是:

  1. 一个computed column,假设你可以使用ALTER TABLE语句将列添加到表中。之后您可以为此列编制索引。
  2. indexed view (AKA materialized view),假设你的数据是否符合要求
  3. 一个临时表,从原来的克隆(和调整,如果你喜欢),您从现有表中导入数据,因此你可以索引和操纵它
3

您是否考虑在这些生成的表之上构建索引视图?您可以在视图中定义您的varchar-to-datetime转换,然后为结果列编制索引。

查看Improving Performance with SQL Server 2005 Indexed Views了解更多信息。我不是使用索引视图的专家,我只读过他们。所以我会留给你看看你的情况是否会是正确的解决方案。

相关问题