我使用 MSSQL MS 执行 SQL Server 2008 R2 数据库上的大多数管理任务,但我发现使用 Access(通过 ADP,而不是链接表)查看和编辑原始表数据效率更高。(这仅供系统管理员使用,当然,用户访问是通过 Web 应用程序进行的,并且所讨论的表相对较小,可能只有几千行。)
然而,自从切换到 Access 2010 以来,性能喝醉了当我在 ADP 中过滤和排序表格并通过 Profiler 观察它时,我知道为什么——Access 不仅仅是不是为 MSSQL准备一个WHERE
子句来实现过滤器,它会多次请求原始表,无论使用哪种过滤器。换句话说,它会执行如下操作:
SET ROWCOUNT 10000
SELECT "dbo"."MYTABLE".* FROM "dbo"."MYTABLE"
SET ROWCOUNT 0
SELECT "dbo"."MYTABLE".* FROM "dbo"."MYTABLE"
SET ROWCOUNT 10000
SELECT "dbo"."MYTABLE".* FROM "dbo"."MYTABLE"
SET ROWCOUNT 0
SELECT "dbo"."MYTABLE".* FROM "dbo"."MYTABLE"
(我省略了一些读取扩展列属性的额外语句。)
Access 在这里到底在做什么?我怎样才能让它使用 SQL Server 执行筛选和排序,以及如何不是每次更改表过滤器时都要进行多次往返?