所以我试图从 SQL Server 2008 实例中获取一些数据,查询的结构非常简单,但性能极差,只需不到一分钟的时间就可以检索超过 1,000,000 行(来自 SSMS)。
在这里你可以看到执行计划。
数据用于统计目的,并且从R-Studio(通过RODBC)使用查询,当从此环境查询时,它的“中断”在 450,000 - 500,000 行附近的某处。我认为 RODBC 在接近 30 秒标记的某个地方超时......
查询
SELECT
cc.ReportID,
cc.ReportDate,
cc.UnitID,
cc.Callsign,
cc.SpeciesCode,
cc.ComName,
cc.CatchWeight,
cc.DayGrid,
cc.NightGrid,
cc.UnitEffortType,
cc.UnitEffort,
cc.Depth,
cc.ReportType,
cc.EffortDesc,
cc.LicenceUsed,
vn.ValidFrom,
vn.Nation,
vn.NationCode,
vg.GRT
FROM
vwVesselGRT vg
INNER JOIN vwVesselNationality vn ON vg.UnitID = vn.UnitID
INNER JOIN vwClientCatch cc ON vn.UnitID = cc.UnitID AND vn.ValidFrom <= cc.ReportDate AND vn.ValidTo > cc.ReportDate
WHERE
cc.ReportDate <= '2016-04-30'
我想知道是否有人遇到过这样的问题。我应该尝试更改查询还是解决问题的 R 方面?恐怕我在这里没有发现真正的问题。
在 SQL 中,该服务器有多少个 CPU?您
MAXDOP
的并行性和成本阈值是多少?您可以做的一件事是检查您的成本阈值是否太低,即运行相同的查询
OPTION (MAXDOP 1)
无需完全重写,您应该能够架构绑定您的视图,您可以在视图上添加索引而无需索引基础表。
如果这将是您经常使用的东西,那么最好的选择是将您的 3 个视图重新写入一个查询,然后基于它创建索引。
你的查询计划有多糟糕,只是从每个视图中选择该查询计划的每一位,尽管我尖叫着重写给我。
视图就像一个保存的选择,我不会真正将它们用于应用程序所依赖的任何东西。
作为没有任何调整的临时修复,你可以运行它
然后从另一边查询