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
嗯,明白了,谢谢 另外再请教一下,事关union那令人蛋痛的order by处理方式,您说是用 SELECT a.Id, a.date,a.nvarchar,a.nvarchar,a.nvarchar,a.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 好呢还是用 SELECT Id, date,nvarchar,nvarchar,nvarchar,int FROM ((SELECT TOP (30) Id, date,nvarchar,nvarchar,nvarchar,int FROM table AS table_1 ORDER BY Date DESC)) b 好?
恩,我知道了,您是说那几个nvarchar和int吧,那只是说明一下我这个表里还另外有三个字符串的字段和一个整型的字段,并不是字段的名字
你试试这种写法: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
嗯,应该是没有逻辑错误,我给date加了索引后不超时了,只是还是有点慢,大约两三秒
然后虽然您这个语句我没试,但是应该是很快的,因为我分别试过union all两边的语句,都很快
不过这样出来的结果至少是不能直接使用的,因为两边查出来的结果一般情况下是有交集的
恩,我知道了,谢谢您,但是转换出来应该是union而不是union all,转换成union all就多了
嗯,明白了,谢谢
另外再请教一下,事关union那令人蛋痛的order by处理方式,您说是用
SELECT a.Id, a.date,a.nvarchar,a.nvarchar,a.nvarchar,a.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
好呢还是用
SELECT Id, date,nvarchar,nvarchar,nvarchar,int FROM ((SELECT TOP (30) Id, date,nvarchar,nvarchar,nvarchar,int FROM table AS table_1 ORDER BY Date DESC)) b
好?
要的,union子句中不能直接使用order by,只能在最后面写一个order by对整个union的结果集进行排序,要想在union子句中写order by只能整成子句的子句
那么您觉得是第二条好?
所以你看看哪个操作可能最快在第一、二不就能降低要处理的结果集吧