2016-08-12 62 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