Microsoft Access是访问MS SQL Server后端数据库中数据的一种灵活方式,但我一直在访问(可以说)大型数据表时遇到问题,尤其是在尝试在Access中切换结果和设计模式时
Access为我提供了许多漂亮的东西,其中最重要的是Crosstabs,但这种与服务器的连接让我有点疯狂!
是否有任何MS Access专家知道如何优化ODBC连接,以便在我只想调整和构建查询时,它不会执行看似全表扫描的操作?
答案 0 :(得分:4)
ODBC驱动程序将尽可能多的工作传递给SQL Server,但只要您使用像Nz这样的vba函数或像PIVOT这样的非SQL Server语法,那么ODBC驱动程序必须撤回更多数据和索引才能完成工作在客户端完成。
根据其他答案,要么在SQL Server中构建视图并链接到视图,要么使用Access数据项目。
注意:无法在SQL Server中处理具有未知列数的PIVOT查询,就像Access本身执行此操作一样 - 因此,如果在Access中针对SQL Server数据运行数据透视表,则可能会将整个表拉回来。必须使用动态SQL技术在SQL Server中构建透视查询,否则必须使用硬编码的所有列预先保存的视图。查看此链接,了解一种方法:
http://www.sqlservercentral.com/articles/Advanced+Querying/pivottableformicrosoftsqlserver/2434/
答案 1 :(得分:1)
正如其他人所说,提高大型表性能的唯一方法是让SQL Server数据库引擎为您完成工作。执行此操作的方法尚未提及是使用传递查询,这将使您能够将所有代码保留在MS Access中,而无需在SQL Server上创建对象:
http://support.microsoft.com/kb/303968
您必须编写SQL Server T-SQL而不是Access方言;但是,SQL 2005(在兼容模式90下运行时)确实支持PIVOT命令。
答案 2 :(得分:1)
我的类似问题是,在选择链接表/ ODBC连接后,ORACLE ODBC连接挂起。任务经理表示在10分钟后没有回应。然后连接为所有可用表ping ORACLE。我已经开启了ORACLE ODBC管理员的登录,因此它必须将所有这些内容写入日志,将任何结果减慢大约几个小时。一小时后日志是60 MB,当我关闭它时,一切都很好!
要关闭它,请转到Oracle安装/网络管理/ MS ODBC管理员/跟踪选项卡并将其关闭!
关于ODBC的一个很好的资源是:http://eis.bris.ac.uk/~ccmjs/odbc_section.html
答案 3 :(得分:0)
不幸的是,Access无法将大量工作推送到服务器,是的,在针对SQL Server中的多个表或视图设计查询时,它会执行大量的表扫描。
您可以使用SSMS在SQL Server中构建和调整查询(视图),并将视图存储在SQL Server中以获得巨大的性能提升,并仍然使用Access作为前端。