我想知道如果执行的查询中没有top子句,是否存在约束或限制表返回的总行数的方法。我们无法轻松修改正在执行的SQL,因此解决方案需要在数据库级别上。
我们有很多查询,我们的系统盲目构建,就像
select * from table where email = 'john'
当我们有小桌子时,这个工作正常,但现在我们的桌子有+10000行,这变得效率低下。
感谢您的任何建议。
答案 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;