我在几台不同的计算机上运行了一些非常大的数据库(500 MB和300 MB)。
从硬件角度来看,这些机器配置相同。
我使用SQL Server CE 4.0作为我的DBMS。
已对性能关键型查询编制索引以提高其性能。
问题是在[仅]其中一台机器上,我观察到的查询性能极其缓慢。这通常发生在长时间不活动之后(从查询角度来看)。在我做了几个(大约7到8个)查询之后,缓慢的性能消失了。
奇怪的是,这个初始的慢查询性能不会发生在另一台机器上。
两台机器之间的唯一区别是数据库中包含的数据。
我怀疑慢速计算机上的数据分发在某种程度上降低了索引的有效性,并且SQL Server CE必须以比其他更快的计算机更重要的方式重新平衡索引。
我注意到的一点是,当查询非常慢时,磁盘活动会显着增加,与读取数据库相对应的进程会显示读取字节的峰值。
在其他机器上不会发生这种情况。
是否有人知道我如何解决这个问题?
我的代码是用C ++编写的,并使用ATL / OLEDB API来操作数据库。
更新:我的性能分析活动表明查询本身并不慢 - 它是返回的行集的处理需要一段时间。对于返回的每一行,我查询另一个数据库以获取相关数据。我知道这不是正确的方法,但性能问题只发生在一台机器上。我注意到的一件事是,当我在其他线程中的同一个数据库上发生其他不相关的查询时,不相关的查询将停止表现出性能问题的查询。