0

这个查询

从 GeoArea 中选择 MAX(ID)

在生产服务器(16Gb RAM)上非常快。它在 1 秒内执行。

但它在测试服务器(3Gb RAM)上非常慢。这需要 10 多分钟(仍在进行中!)。

数据库是一样的。SQL Server 版本相同。

该表有 200 万行。为什么在测试服务器上很慢?我认为这只是一个集群索引扫描。

更新

SQL 重启没有帮助。我已将生产数据库复制到测试服务器并解决了问题。

4

2 回答 2

2

10分钟,它还在运行?
你确定它还在运行吗?
如果 ID 是一个聚集索引并且该表有 200 万行,那么就有问题了。
1 秒到 10 秒差别很大。
1 秒到 10 分钟以上超过了硬件或索引或统计信息。

你可能在那个桌子上有锁。
尝试:

SELECT MAX(ID) FROM GeoArea with (nolock) 

如果这不能解决它重新启动 SQL。

于 2013-10-16T13:36:30.193 回答
2

可以是(不限于)

  • 纯硬件相关(生产中的 RAID,测试中的远程 SAN 解决方案)
  • 在同一个硬盘/RAM/CPU/表上竞争活动,可能是死锁,可能未提交的事务仍然打开
  • 缺少索引(我知道你这么说,但它真的是同一个数据库吗?)
于 2013-10-16T13:17:29.173 回答