2013-11-24 63 views
0

我想在Microsoft SQL Server中創建虛擬列索引2005如何創建虛擬列索引在SQL Server

WITH OrderedOrders AS 
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY I_D) AS RowNumber FROM ST_Agency_Tbl 
    WHERE Delete_Flag <> 1 
) 
    SELECT * FROM OrderedOrders 
    WHERE RowNumber >= 8000000 AND RowNumber <= 8000100 

我想在ROWNUMBER

+0

不能添加索引到CTE ... –

+0

我認爲你需要使用臨時表用於此目的 – brykneval

回答

0

我不認爲你創建索引將能夠做到這一點。在計算列上創建索引時,該列必須通過一些測試(請參閱MSDN的更多信息)。

其中之一就是:

是在表達來自包含計算列的表引用的所有列。

這是不正確的,你的情況。

+0

謝謝回答 我用ROWNUMBER串行列1,2,3,... 但當我執行上述查詢,執行時間2之間 - 分鐘 3能否使用替代方法來產生連續,而無需使用ROW_NUMBER()? – user3026977

+0

不知道說實話... – Szymon

0

對於這種類型的查詢的I(在本例中上Sales.SalesOrderHeader.SalesOrderID柱)使用如果源表中有一個唯一的聚集索引以下解決方案:

-- Test #2 
SELECT SalesOrderID, RevisionNumber, OrderDate, DueDate, ShipDate, OnlineOrderFlag 
FROM Sales.SalesOrderHeader h 
WHERE h.SalesOrderID IN 
(
    SELECT y.SalesOrderID 
    FROM 
    (
     SELECT x.SalesOrderID, ROW_NUMBER() OVER(ORDER BY h.SalesOrderID) AS RowNum 
     FROM Sales.SalesOrderHeader x 
    ) y 
    WHERE y.RowNum BETWEEN 1001 AND 1050 
) 
GO 

對於這個測試我用AdventureWorks2012示例數據庫http://msftdbprodsamples.codeplex.com/releases/view/93587