gpt4 book ai didi

sql - 相同 SQL 查询在一个数据库中运行的时间比在同一服务器下的另一个数据库中运行的时间长

转载 作者:行者123 更新时间:2023-12-01 05:23:04 28 4
gpt4 key购买 nike

我有一个 SQL 数据库服务器和 2 个具有相同结构和数据的数据库。我在 2 个数据库中运行相同的 sql 查询,其中一个需要更长的时间,而另一个在不到 50% 的时间内完成。他们都有不同的执行计划。

View 的查询如下:

SELECT DISTINCT  i.SmtIssuer, i.SecID, ra.AssetNameCurrency AS AssetIdCurrency, i.IssuerCurrency, seg.ProxyCurrency, shifts.ScenarioDate, ten.TenorID, ten.Tenor, 
shifts.Shift, shifts.BusinessDate, shifts.ScenarioNum
FROM dbo.tblRrmIssuer AS i INNER JOIN
dbo.tblRrmSegment AS seg ON i.Identifier = seg.Identifier AND i.SegmentID = seg.SegmentID INNER JOIN
dbo.tblRrmAsset AS ra ON seg.AssetID = ra.AssetID INNER JOIN
dbo.tblRrmHistSimShift AS shifts ON seg.Identifier = shifts.Identifier AND i.SegmentID = shifts.SegmentID INNER JOIN
dbo.tblRrmTenor AS ten ON shifts.TenorID = ten.TenorID INNER JOIN
dbo.tblAsset AS a ON i.SmtIssuer = a.SmtIssuer INNER JOIN
dbo.tblRrmSource AS sc ON seg.SourceID = sc.SourceID
WHERE (a.AssetTypeID = 0) AND (sc.SourceName = 'CsVaR') AND (shifts.SourceID =
(SELECT SourceID
FROM dbo.tblRrmSource
WHERE (SourceName = 'CsVaR')))

我已经尝试过的事情是 - 重建和重新组织表上的索引(tblRRMHistSimShifts - 该表有超过 200 万条记录),检查服务器上的锁或其他后台进程或错误,服务器的最大并行度为 0。

您还有什么建议可以解决这个问题吗?

最佳答案

您在同一台服务器上有两个数据库并且具有相同的数据集(如您所说)并不能确保相同的执行计划。

以下是查询计划可能不同的一些原因:

  • mdf 和 ldf 文件(对于每个数据库)位于不同的驱动器上。如果一个
    驱动器速度更快,该数据库也会更快地运行查询。
  • 停滞统计。如果您有一个数据库的统计数据比
    另一方面,SQL 有更好的机会选择合适的(和
    更快)执行计划。
  • 索引:我知道你说它们是相同的,但我会检查
    如果您在两者上都有相同类型的索引。

  • 专注于查看查询运行缓慢的原因或查看实际执行计划,而不是进行比较。检查慢查询的实际执行计划会给你一个为什么运行慢的提示。

    另外,我不会添加 NO LOCK 语句来解决这个问题。根据我的经验,大多数慢查询都可以通过代码或索引进行调整,而不是添加一个 NO LOCK 提示,这可能会使您修改或旧结果集,具体取决于您的事务。

    关于sql - 相同 SQL 查询在一个数据库中运行的时间比在同一服务器下的另一个数据库中运行的时间长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15481642/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com