将SQL Server视图链接到Access数据库:性能问题
当您将SQL Server视图作为MS Access链接表附加时,系统会要求您提供唯一标识。在最近的试验中,我注意到有几次,不定义唯一标识符会导致链接表更快地打开(你不需要秒表,你可以真正看到它)。将SQL Server视图链接到Access数据库:性能问题
所以我问专家是否有解释这个,以及规则是什么:为附加视图定义或不定义主键?
我在同一台机器上进行的比较,相同的Access 2007 db,相同的视图,相同的驱动程序(SQL Server 10),相同的SQL Server 2008服务器。
对我而言,我不需要更新链接表(这是SQL视图)。
访问只需要一个唯一的标识符就可以执行更新。如果你没有定义唯一的标识符(并且你不需要),它没有跟踪它们,所以我猜它更快。我不确定为什么差异如此明显。多少宽度(列和字节)是您在缓慢版本上选择的唯一标识符?
ID很小,像10个字符,并且数据设置在15000条记录左右。服务器功能强大且不繁忙。下次我将尝试查看客户机上的处理器使用情况。 – 2009-10-17 06:20:51
性能差异可能与它能够使用更多性能锁定策略有关,因为它知道数据将是只读的。 – JohnFx 2009-10-19 18:16:51
我在我的测试机器上复制了你的结果,甚至运行了剖析器,看看我是否可以弄明白。我连接到一个视图两次,一次指定了唯一的标识符,另一个没有指定。和你一样的结果。
个人资料不是很明亮;对于UNindexed视图,它是一个标准的SELECT columnList FROM视图。对于索引视图,它仅指定了键列(即使结果清楚地显示了所有列)。
我能想到的唯一的事情是,由于您在Access中指定了唯一的密钥,因此数据集必须完全拉入内存才能使Access将服务器上的密钥列与本地索引相关联。如果没有本地索引,则不需要进行该关联。
我希望Jet能够提取关于索引的元数据,而不是其他的。它当然不需要拉整桌,甚至可能不是整个PK指数。 – 2009-10-17 01:45:31
或许;令我困惑的是,即使我在Access中看到链接表中显示的数据,在索引版本上执行的查询只是选择了索引列。其余数据来自哪里? – 2009-10-17 02:52:39
很高兴看到你找到山姆的事情。我的发现仅仅是因为手动打开表格(几次)而引起的明显延迟。 我想知道Access是否在打开时创建一个本地唯一索引? – 2009-10-17 06:13:02
这是一个真正的表演技巧! – 2010-03-03 23:37:12