我的視圖命名爲「Ge_Entry」運行速度非常慢,因此希望使用select distinct語句創建索引視圖,但sql server不允許它。如何使用sql 2005中的select distinct語句創建索引視圖
所以我想知道有沒有什麼辦法用s.dist語句創建i.view。
因此,我可以在此視圖上創建索引以獲得快速結果。
感謝名單
尼爾
我的視圖命名爲「Ge_Entry」運行速度非常慢,因此希望使用select distinct語句創建索引視圖,但sql server不允許它。如何使用sql 2005中的select distinct語句創建索引視圖
所以我想知道有沒有什麼辦法用s.dist語句創建i.view。
因此,我可以在此視圖上創建索引以獲得快速結果。
感謝名單
尼爾
您不能使用不同。但是你可以使用COUNT_BIG(*)
和GROUP BY
,可能是:
CREATE VIEW v1
WITH SCHEMABINDING
AS
SELECT ColumnA,ColumnB,COUNT_BIG(*) as Cnt
FROM BaseTable
GROUP BY ColumnA,ColumnB
GO
CREATE UNIQUE CLUSTERED INDEX IX_v1 ON v1 (ColumnA,ColumnB)
GO
而是創建索引視圖的DISTINCT ColumnA,ColumnB
大多數規則似與維護索引的效率。想象一下,你有一個基表,內容如下:
ID ColumnA ColumnB
1 abc def
2 abc def
3 ghi jkl
你被允許創建基於上不同的純粹你的看法。現在,您從表格中刪除ID 2
的行。 SQL Server是否應該從視圖的索引中刪除行abc,def
?它只能通過再次掃描整個基表來找出。
將此與我上面的視圖定義進行對比。這裏的視圖中的數據是什麼樣子:
ColumnA ColumnB Cnt
abc def 2
abc def 1
如果刪除ID 2
從基表中的行,SQL Server可以從Cnt
列減去1行abc,def
。如果該列的新值是0
,它知道它應該從索引中刪除該行。相反,如果值爲>0
,那麼它知道基表中仍存在此值的行。
達米恩,很多thanx您的廣泛答覆,我明白,索引視圖不支持選擇不同的聲明,實際上查看「Ge_Entry」包含很多意見。所以我要求創建索引視圖 – Kamal
@Kamal - 是我的解決方案(而不是使用'DISTINCT',在所有列上使用'GROUP BY')適合您,還是有問題? (不知道你的評論) –
不,你不能使用DISTINCT。是否有一些列或列的組合可以應用某些條件來產生您感興趣的行? –