我想知道如果执行的查询中没有 top 子句,是否有约束或方法来限制表返回的总行数。我们不能轻易修改正在执行的 SQL,因此解决方案需要在 db 级别。
我们的系统盲目地构建了很多查询,例如
select * from table where email = 'john'
当我们有小表时,这工作得很好,但现在我们的表有 +10000 行,这变得效率低下。
感谢您的任何建议。
我想知道如果执行的查询中没有 top 子句,是否有约束或方法来限制表返回的总行数。我们不能轻易修改正在执行的 SQL,因此解决方案需要在 db 级别。
我们的系统盲目地构建了很多查询,例如
select * from table where email = 'john'
当我们有小表时,这工作得很好,但现在我们的表有 +10000 行,这变得效率低下。
感谢您的任何建议。
答案是“是”。一种方法是使用“设置行数”。另一种方法是为此目的使用查询连接中内置的任何工具。
例如:
SET ROWCOUNT 10
select * from INFORMATION_SCHEMA.COLUMNS
这会将任何后续查询返回的最大行数设置为 10。但是,为了将其融入您的应用程序,我们需要更多信息,例如该应用程序如何访问数据库。
这有点令人费解:
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;