我有一個CHAR(250)列用作varchar(24)列的外鍵。在部分CHAR列上創建索引
在MySQL中,我記得我可以創建一個索引指定列(24),以便在最左邊的24個字符上創建一個索引。這似乎不可能在MS SQL Server上。
我的問題是這樣的:
是否可以使用SQL Server 2008上的索引視圖索引列的子串,如果是的話,那就在桌子上的性能有任何副作用?
我有一個CHAR(250)列用作varchar(24)列的外鍵。在部分CHAR列上創建索引
在MySQL中,我記得我可以創建一個索引指定列(24),以便在最左邊的24個字符上創建一個索引。這似乎不可能在MS SQL Server上。
我的問題是這樣的:
是否可以使用SQL Server 2008上的索引視圖索引列的子串,如果是的話,那就在桌子上的性能有任何副作用?
您可以創建一個持久化計算列,那麼指數就見Creating Indexes on Computed Columns
alter table add newcolumn as cast(oldcolumn as varchar(24)) persisted;
create index table_newcolumn on table (newcolumn);
我希望你有一個很好的關係這樣做的理由。我猜測供應商提供的表格的前24個字符實際上構成了一個離散屬性,應該放在第一個單獨的列中。
因此...
創建供應商表的視圖。如果你喜歡索引它。我懷疑你可以在視圖上指向FK約束,但是你當然可以寫一個觸發器來達到同樣的效果。檢索索引視圖的觸發器將非常快速,但代價是視圖基表上的更新時間略有增加。
HTH。
沒有粘性關係的原因,這是一個決定,我的時間之前,我或多或少堅持。沒有*實際* FK約束擔心。它已經在同一臺服務器上完全獨立的數據庫中。我有一個需要40分鐘才能運行的存儲過程,我主要關心。把這個領域的指數看起來似乎過大(〜400mb)。磁盤空間並不是那麼重要,所以如果沒有其他性能優勢可言,我只是在浪費我的時間。 – 2010-10-28 04:41:17
謝謝!但我忽略的是,所討論的表格是第三方應用程序的一部分,因此更改表格本身是嚴格禁止的。 – 2010-10-26 23:43:31
我不確定FK是否會從索引視圖中受益。查詢和連接*可能會從中受益,但FK實施本身可能會忽略您的索引視圖,導致FK執行驗證的性能不佳。 – 2010-10-26 23:54:03
夠公平的,我想我只能嘗試一下。 – 2010-10-26 23:59:55