2016-08-12 28 views
0

我創建一個表如下:獲取查詢更快

CREATE TABLE [dbo].[Table_10](
    [Name] [nchar](10) NULL, 
    [Date] [datetime] NULL 
) 

創建了[日期]

CREATE CLUSTERED INDEX index_name10 
ON dbo.table_10 ([Date]); 

然後用數據的80K填寫表格隨機聚集索引(但在有序的日期時間後)

運行此查詢,完成約1分鐘

我期待,因爲我覺得n這個運行速度更快ested查詢可以在對數時間完成。但似乎不是,我錯了什麼或如何更快地做到這一點?

SELECT Table_10.[date], (SELECT COUNT(*) FROM 
             Table_10 AS t10 
             WITH(INDEX(index_name10)) 
             WHERE table_10.[date] < t10.[Date]) 

FROM table_10 
+0

哪個RDBMS適用於?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –

+0

添加了sql-server標籤 – mojtaba357

+0

您可以按照datetime進行排序,這並不重要。對於DBMS,表格仍然是一組無序的數據。 –

回答

0

您似乎在使用SQL Server。您可以使用rank()用於此目的:

select t.*, 
     (rank() over (order by [date]) - 1) 
from table_10; 

如果[date]有沒有重複,那麼它是更清晰的使用row_number()代替:

select t.*, 
     (row_number() over (order by [date]) - 1) 
from table_10; 

時才需要- 1,因爲你似乎要開始了編號爲0而不是1.

+0

感謝您的另一個解決方案,但我的主要問題是爲什麼我的代碼運行緩慢?通過創建索引我期望更快執行 – mojtaba357

+0

@ mojtaba357。 。 。您的查詢運行緩慢,因爲這是表達您想要執行的操作的錯誤方式。 –

+1

@GordonLinoff你能解釋一下嗎?這是正確的做法嗎? – MtwStark