2010-09-28 50 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瞭解更多信息。我不是使用索引視圖的專家,我只讀過他們。所以我會留給你看看你的情況是否會是正確的解決方案。

相關問題