我有一个包含800万条记录的表,包含很多字段,包括lat / long值,并且它有一个Lat / Long字段的索引。
我正在进行查询,以查找位于某个点周围的正方形内的记录(以后再精简成一个圆圈),这有点像:
SELECT Lat,Long FROM Data WHERE(Lat BETWEEN 1 AND 2)AND(Long BETWEEN 1 AND 2)。
在我的开发机器中,它使用索引,并在大约50ms内返回(我第一次查询特定点)。
在我的生产服务器中,它也使用索引,但第一个查询返回大约需要2-4秒,后续查询需要10秒。
在我的开发机器中,SQL Server在我的服务器中占用了大约130Mb的500Mb内存。
对我而言,显而易见的结论是,在我的机器中,索引被加载到内存中,而在生产服务器中,它不是......
我的假设是否正确? 我该怎么做才能解决它?
这是两台机器上W2k3上的SQL Express 2005(免费版)。 我能想到的一个区别是我的机器是32位,服务器是64,但我不认为这会如何影响内存中索引的加载。
此外,服务器内存不足。它有2Gb物理内存,大约500Mb的提交费用,所以有很多空闲。
任何想法将不胜感激! 谢谢!
答案 0 :(得分:2)
当我遇到这种情况时,通常会按以下顺序尝试两件事:
1 - 更新该表的统计信息:
更新统计数据
2 - 重建索引:(右键单击SQL Server Management Studio中的索引并选择Rebuild)