SQL Server TOP约束

时间:2012-06-21 15:43:14

标签: sql-server sql-server-2008

我想知道如果执行的查询中没有top子句,是否存在约束或限制表返回的总行数的方法。我们无法轻松修改正在执行的SQL,因此解决方案需要在数据库级别上。

我们有很多查询,我们的系统盲目构建,就像

select * from table where email = 'john'

当我们有小桌子时,这个工作正常,但现在我们的桌子有+10000行,这变得效率低下。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:4)

答案是肯定的。一种方法是使用“set rowcount”。另一种方法是使用查询连接中内置的任何工具来实现此目的。

例如:

SET ROWCOUNT 10
select * from INFORMATION_SCHEMA.COLUMNS

这为任何后续查询设置返回的最大行数为10。但是,为了使其适合您的应用程序,我们需要更多信息,例如该应用程序如何访问数据库。

答案 1 :(得分:1)

这有点令人费解:

CREATE TABLE temp
(
y  char(9) PRIMARY KEY,
x  char(9)
);

insert into temp (x, y) values ('j', 'hello');
insert into temp (x, y) values ('j', 'world');
insert into temp (x, y) values ('q', 'foo');
insert into temp (x, y) values ('q', 'bar');


with myCTE(x,y,r) as
(
select 
  x
  ,y
  , r = ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
from temp
)
select * from myCTE where r <= 3;