【发布时间】:2019-07-05 20:34:45
【问题描述】:
我有一个 SQL 查询和两个不同日期的同一数据库的恢复。一个还原是 11 月 7 日,另一个是 12 月 10 日。在 11 月 7 日的数据库还原中,查询运行 5 小时,在 12 月 10 日的数据库还原中,相同的查询在 23-25 秒内运行。
我比较了查询中涉及的表的两个数据库的索引,但两者的索引相似。然后我在两个数据库还原上检查了同一查询的查询执行计划。在两个执行计划中发现了许多差异。在 11 月 7 日数据库还原的查询执行计划中,与 12 月 10 日数据库还原相比,我看到了许多嵌套连接。 SQL Server 在 11 月 7 日数据库中使用 Nested Join 的地方,与在 12 月 10 日数据库中使用 Merge Join 的地方相同。
谁能帮助解释为什么我们在查询执行计划中存在这种差异,以及为什么查询在 11 月 7 日数据库中运行缓慢。
【问题讨论】:
-
统计数据过期?
-
尝试重建两个数据库中表的索引
-
不看执行计划是不可能的。
标签: sql-server performance indexing