SQL 查询比平时花费更多时间
Posted
技术标签:
【中文标题】SQL 查询比平时花费更多时间【英文标题】:SQL query is taking more time than usual 【发布时间】: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'
【问题讨论】:
先阅读***.com/help/how-to-ask,然后至少与我们分享执行计划 这是 EAV 型号吗? 另外,请使用国际通用的度量 - 比如数千、数百万、数十亿......WHERE DIMENSIONATTRIBUTE.NAME <> 'MainAccount'
不能使用索引,至少效率不高。
Why is my query suddenly slower than it was yesterday
【参考方案1】:
试试这个可能对你有帮助
如果查询从未完成,您必须获得估计的执行计划,而不是实际的。由于它只有一行,因此您可能拥有最慢的计算机:
使用 WITH (NOLOCK)
【讨论】:
WITH (NOLOCK)
是做什么的?
@SalmanA 我认为它似乎:当您使用 NOLOCK 查询提示时,您是在告诉存储引擎您想要访问数据,无论数据是否被另一个进程锁定。跨度>
NOLOCK 等同于 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED,除非您完全了解您所得到的,否则这通常是一个非常糟糕的主意。可能由此产生的脏读意味着您可以获得一个根据 ACID 从未存在过的值。以上是关于SQL 查询比平时花费更多时间的主要内容,如果未能解决你的问题,请参考以下文章
从 AWS S3 复制到 Snowflake 需要比平时更多的时间