当前位置: 代码迷 >> Sql Server >> 好简单的语句,总数据也才7万多,如何就超时了,求问该如何查询才对
  详细解决方案

好简单的语句,总数据也才7万多,如何就超时了,求问该如何查询才对

热度:23   发布时间:2016-04-24 10:39:51.0
好简单的语句,总数据也才7万多,怎么就超时了,求问该怎么查询才对
语句如下:
SELECT     Id, date,nvarchar,nvarchar,nvarchar,int
FROM         table
WHERE     (Id IN
                          (SELECT     TOP (30) Id
                            FROM          table AS table_1
                            ORDER BY Date DESC)) OR
                      (Date > DATEADD(day, - 30, GETDATE()))
ORDER BY Date DESC
------解决方案--------------------
Date 加索引,很简单的优化
------解决方案--------------------
7万数据除非笛卡儿积,不然一般不至于超时,我怀疑你的where条件逻辑有错。
你试试这种写法:

SELECT     Id, date,nvarchar,nvarchar,nvarchar,int
FROM         table a inner join ((SELECT     TOP (30) Id
                            FROM          table AS table_1
                            ORDER BY Date DESC)) b on a.id=b.id
union all 
SELECT     Id, date,nvarchar,nvarchar,nvarchar,int
FROM         table
where Date > DATEADD(day, - 30, GETDATE())
ORDER BY Date DESC

------解决方案--------------------
你在外层distinct一下,union会引入排序和去重操作不利于性能。你的数据集上一个只有30条,下一个未知,估计不多,几十条数据distinct比在内存union性能高好多
  相关解决方案