我们有一个在MSAccess中运行的应用程序,但是它使用SQL Server作为后端数据库。这会生成一个查询来检查它有权访问哪些视图,对于普通用户,这需要18秒。对于属于db_owner角色的所有用户,它需要0.2秒。有没有什么办法可以为普通用户调整呢?也许我可以在Access中做的事情?我不想给他们db_owner,并且重写应用程序以不使用Access是不可能的。MS Access中针对SQL Server的内部查询的性能问题
这里的查询:
select
object_name(id),
user_name(uid), type,
ObjectProperty(id, N'IsMSShipped'),
ObjectProperty(id, N'IsSchemaBound')
from sysobjects
where type = N'V'
and permissions(id) & 4096 <> 0
使用的MS Access 2003,SQL Server 2008 R2的
当您在其中一个用户名下运行查询时,会返回多少个视图? – 2012-04-12 14:26:46
它为db_owners返回1351行,为普通用户返回1344行 – 2012-04-13 06:49:58
执行计划完全相同。在winmerge中比较它们,唯一的区别是QueryPlan元素的CompileTime和CompileCPU略有不同(两者都是vs 7)和RunTimeCountersPerThread元素,其中ActualRows对于普通用户是1344,对于db_owners是1351 – 2012-04-13 06:55:53