语句如下:
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性能高好多