代码之家  ›  专栏  ›  技术社区  ›  Bill Paetzke

是否有任何方法可以将varchar列作为日期时间索引?

  •  3
  • Bill Paetzke  · 技术社区  · 14 年前

    我正在查询包含所有有效日期时间的varchar列。在查询中,我将列强制转换为datetime。

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

    通过查询分析,我看到如果我可以在这个列上添加索引,查询会更快。但它是瓦尔查尔。如果我添加了一个索引,它将基于varchar值进行索引,对吗?但我希望它对日期时间值进行索引,是吗?

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

    2 回复  |  直到 14 年前
        1
  •  6
  •   OMG Ponies    14 年前

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

    SQL Server没有基于函数的索引,因此您的选项是:

    1. computed column ,假设您可以使用alter table语句向表中添加列。您可以在那之后为这个列编制索引。
    2. indexed view (AKA materialized view) ,假设您的数据满足要求
    3. 一个临时表,从原始表中克隆(如果愿意,还可以进行调整),从现有表中导入数据,以便对其进行索引和操作。
        2
  •  3
  •   Bill Karwin    14 年前

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

    Improving Performance with SQL Server 2005 Indexed Views 更多信息。我不是使用索引视图的专家,我只读过它们。因此,我将由您决定是否是您的案件的正确解决方案。