我正在查询包含所有有效日期时间的varchar列。在查询中,我将列转换为datetime。
请记住,将列的数据类型定义更改为datetime不是一个选项。只要相信我,这不是一个选择。
通过查询分析,我发现如果我可以在此列上添加索引,查询会快得多。但它是varchar。如果我添加了一个索引,它会根据它的varchar值进行索引,对吧?但我希望它能在日期时间值上编制索引,是吗?
我在这里可以为索引做些什么吗?
答案 0 :(得分:6)
有效数据是第一优先级,因为任何将数据转换为DATETIME的方法都会返回1900年1月1日午夜时的值,此值与可接受的格式不匹配。
SQL Server没有基于函数的索引,因此您的选项是:
答案 1 :(得分:3)
您是否考虑过在这些生成的表格之上构建索引视图?您可以在视图中定义varchar-to-datetime转换,然后索引该结果列。
有关详细信息,请参阅Improving Performance with SQL Server 2005 Indexed Views。我不是使用索引视图的专家,我只读过它们。因此,我会在您的情况下确定它是否是正确的解决方案。