【问题标题】:Linking SQL Server view into Access db: performance question将 SQL Server 视图链接到 Access db:性能问题
【发布时间】:2009-10-17 08:48:42
【问题描述】:

当您将 SQL Server 视图附加为 MS Access 链接表时,系统会要求您提供唯一标识符。在最近的试验中,我注意到在某些情况下,不定义唯一标识符会导致链接表打开得更快(您不需要秒表,您可以真正看到它)。

所以我问专家是否对此有解释,规则是什么:为附加视图定义或不定义主键?

我的比较是在同一台机器、相同的 Access 2007 数据库、相同的视图、相同的驱动程序 (SQL Server 10)、相同的 SQL Server 2008 服务器上进行的。
就我而言,我不需要更新链接表(它们是 SQL 视图)。

【问题讨论】:

  • 这是一个真正的表演技巧!

标签: sql-server ms-access ms-access-2007


【解决方案1】:

Access 只需要一个唯一标识符即可执行更新。如果您没有定义唯一标识符(并且您不需要),它就不会跟踪它们,所以我想它会更快。我不确定为什么差异如此明显。您在慢速版本中选择的唯一标识符有多宽(列和字节)?

【讨论】:

  • ID 很小,比如 10 个字符,数据集大约 15000 条记录。服务器功能强大且不忙。下次我将尝试查看客户端计算机上的处理器使用情况。
  • 性能差异可能与它能够使用性能更高的锁定策略有关,因为它知道数据将是只读的。
【解决方案2】:

我在我的测试机器上复制了你的结果,甚至运行分析器来看看我是否能弄清楚。我连接到一个视图两次,一次指定了唯一标识符,一次没有指定唯一标识符。结果和你一样。

个人资料不是很有启发性;对于未索引视图,它是标准的 SELECT columnList FROM 视图。对于 Indexed 视图,它只指定了键列(即使结果清楚地显示了所有列)。

我唯一能想到的是,由于您在 Access 中指定了唯一键,因此必须将数据集完全拉入内存,以便 Access 将服务器上的键列与本地索引相关联。如果没有本地索引,则不需要发生这种关联。

【讨论】:

  • 我希望 Jet 提取有关索引的元数据,而不是其他。它当然不需要拉整个表,甚至可能不需要整个 PK 索引。
  • 也许;令我困惑的是,即使我在 Access 中看到链接表中显示的数据,在索引版本上执行的查询只是选择索引列。其余数据从何而来?
  • 很高兴看到你找到了同样的东西。我在这里的发现只是由于手动打开表格时出现了明显的延迟(几次)。我想知道 Access 在打开时是否正在构建本地唯一索引?
  • Stuart:对于您提到的“其余数据”:也许有一个类似于 Access“输出所有字段”的选项? (我不是 Sql Server 专家)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 2013-08-06
相关资源
最近更新 更多