【问题标题】:SQL query is taking more time than usualSQL 查询比平时花费更多时间
【发布时间】:2019-10-10 12:17:22
【问题描述】:

我的查询需要 2 个小时才能从数据库中获取 250 万行。我也检查了执行计划。索引也工作正常。

这是查询:

SELECT 
    GeneralJournalAccountEntry.RecId as [Transaction #],
    GENERALJOURNALACCOUNTENTRY.LEDGERACCOUNT AS [LEDGER WITH DIMENSIONS],
    DIMENSIONATTRIBUTE.NAME AS [DIMENSION TYPE],
    DIMENSIONATTRIBUTELEVELVALUE.DISPLAYVALUE as [DIMENSION VALUE]
FROM 
    DIMENSIONATTRIBUTE
INNER JOIN 
    DIMENSIONATTRIBUTEVALUE ON DIMENSIONATTRIBUTE.RECID = DIMENSIONATTRIBUTEVALUE.DIMENSIONATTRIBUTE
INNER JOIN 
    DIMENSIONATTRIBUTELEVELVALUE ON DIMENSIONATTRIBUTEVALUE.RECID = DIMENSIONATTRIBUTELEVELVALUE.DIMENSIONATTRIBUTEVALUE
INNER JOIN 
    DIMENSIONATTRIBUTEVALUEGROUPCOMBINATION ON DIMENSIONATTRIBUTELEVELVALUE.DIMENSIONATTRIBUTEVALUEGROUP = DIMENSIONATTRIBUTEVALUEGROUPCOMBINATION.DIMENSIONATTRIBUTEVALUEGROUP
INNER JOIN 
    GENERALJOURNALACCOUNTENTRY ON DIMENSIONATTRIBUTEVALUEGROUPCOMBINATION.DIMENSIONATTRIBUTEVALUECOMBINATION = GENERALJOURNALACCOUNTENTRY.LEDGERDIMENSION
INNER JOIN 
    GENERALJOURNALENTRY ON GENERALJOURNALENTRY.PARTITION = GENERALJOURNALACCOUNTENTRY.PARTITION AND GENERALJOURNALENTRY.RECID = GENERALJOURNALACCOUNTENTRY.GENERALJOURNALENTRY
WHERE
    DIMENSIONATTRIBUTE.NAME <> 'MainAccount'

【问题讨论】:

标签: sql sql-server performance query-optimization sql-execution-plan


【解决方案1】:

试试这个可能对你有帮助

如果查询从未完成,您必须获得估计的执行计划,而不是实际的。由于它只有一行,因此您可能拥有最慢的计算机:

使用 WITH (NOLOCK)

【讨论】:

  • WITH (NOLOCK) 是做什么的?
  • @SalmanA 我认为它似乎:当您使用 NOLOCK 查询提示时,您是在告诉存储引擎您想要访问数据,无论数据是否被另一个进程锁定。跨度>
  • NOLOCK 等同于 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED,除非您完全了解您所得到的,否则这通常是一个非常糟糕的主意。可能由此产生的脏读意味着您可以获得一个根据 ACID 从未存在过的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2017-08-04
  • 1970-01-01
  • 2020-09-07
相关资源
最近更新 更多