Sql-Server
索引視圖與過濾索引的成本?
我遇到了以下表格設計,用於以非規範化方式記錄引用:
RecordGUID uniqueidentifier DestinationEntity uniqueidentifier DestinationRecordGUID uniqueidentifier
例如,
Users
對於描述對 的引用的表Countries
,我們將有:RecordGUID DestinationEntity DestinationRecordGUID 79282C80-4474-4617-9C40-C21E97F5AC52 3A462EF8-DAB6-4B98-BA1B-FBD957A1737C 5842E524-8C5D-4DEE-A553-0857FB9C12F4 B25DA064-8DAF-4EEB-8894-D540B3A929EA 3A462EF8-DAB6-4B98-BA1B-FBD957A1737C C2B0AA1A-E688-4E2C-BD5F-16309C496774
因此,
3A462EF8-DAB6-4B98-BA1B-FBD957A1737C
表示Countries
、 while5842E524-8C5D-4DEE-A553-0857FB9C12F4
和C2B0AA1A-E688-4E2C-BD5F-16309C496774
是指Counries
表中的記錄。我們在這裡有很多關係——例如
users
tolanguages
、companies
等。而且因為GUID
為了加入表格而使用它不是使用者友好的,所以我們為每個關係建立了索引視圖,如下所示:CREATE VIEW [dbo].[users_countries] WITH SCHEMABINDING AS SELECT [RecordGUID] ,[DestinationEntity] ,[DestinationRecordGUID] FROM (the relationship table) WHERE [DestinationEntity] = '3A462EF8-DAB6-4B98-BA1B-FBD957A1737C';
因此,人們可以輕鬆地將此視圖連接到
counties
表並對其進行查詢 - 此外,由於使用視圖(沒有展開)並在其上有索引,並非原始表中的所有記錄都被讀取(它更快)。系統可能有數百個索引視圖,與原始表上的過濾索引相比,我擔心引擎管理它們的成本。我的意思是
view
只創建這樣的索引:CREATE INDEX (index_Name) ON (the relationship table) ( [RecordGUID] ,[DestinationRecordGUID] ) WHERE [DestinationEntity] = '3A462EF8-DAB6-4B98-BA1B-FBD957A1737C'
我們不再能夠以友好的方式查詢該表,但這會影響性能嗎?
我找不到任何關於索引視圖損害性能的話題——但面對這樣的設計讓我懷疑。
我想知道我們可以說視圖索引的維護和表上的相同索引(如上)是相同的嗎?
這設計太可怕了。您應該有單獨的表和真正的外鍵。要快速修復,請使用索引視圖。如果存在性能問題,請修復設計。