首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MS Access针对SQL Server的内部查询的性能问题

MS Access针对SQL Server的内部查询的性能问题
EN

Stack Overflow用户
提问于 2012-04-12 21:26:49
回答 3查看 576关注 0票数 2

我们有一个在MSAccess中运行的应用程序,但使用SQL Server作为后端数据库。这将生成一个查询来检查它有权访问哪些视图,对于普通用户来说,这需要18秒的时间。对于作为db_owner角色成员的所有用户,这需要0.2秒。有没有什么方法可以为普通用户调优?也许我可以在Access中做些什么?我不想给他们提供db_owner,而且重写应用程序以不使用访问权限也是不可能的。

下面是查询:

代码语言:javascript
复制
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 Server2008 R2

EN

回答 3

Stack Overflow用户

发布于 2012-04-15 13:07:02

如果找不到问题的根本原因,或许一个变通办法可能会有所帮助?这只是一个想法:您可以将SQL语句封装在db_owner拥有的进程中,并为其提供一个EXECUTE AS子句。这样,当非db_owner调用proc时,proc中的db_owner将在proc的持续时间和作用域的模拟下执行。希望您的非db_owner用户能够从db_owner运行该SQL时看到的性能中受益。

票数 0
EN

Stack Overflow用户

发布于 2014-09-26 22:11:10

参加派对有点晚了,但试试这个:

代码语言:javascript
复制
select
  [name], 
  schema_name(schema_id), 
  [type], 
  Is_MS_Shipped,
  Is_Schema_published
from 
    sys.all_views
where 
    not permissions(object_id) & 4096 = 0

使用视图特定的对象并反转比较可能会给您带来轻微的改进

票数 0
EN

Stack Overflow用户

发布于 2014-09-26 22:30:33

让我猜猜:您有一个Access-ADP应用程序在启动时执行此操作。我们有完全一样的东西。此查询用于获取Access稍后使用的元数据。问题的根本原因是不推荐使用的权限函数:

http://msdn.microsoft.com/en-us/library/ms186915.aspx

引用:“继续使用权限功能可能会导致性能降低。”

由于您既不能更改查询,也不能更改函数,因此您的运气不佳。

我建议你考虑使用带有链接表的ACCDB,因为Access 2013取消了对ADP的支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10124547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档