Sql 2行停止选择查询运行
在Oracle SQL中运行此查询时Sql 2行停止选择查询运行,sql,oracle,Sql,Oracle,在Oracle SQL中运行此查询时 SELECT ImportRef.GL_SL_LINK_ID, ImportRef.GL_SL_LINK_TABLE, Combos.Segment5 FROM GL_IMPORT_REFERENCES ImportRef JOIN GL.GL_JE_LINES GLLines ON GLLines.JE_HEADER_ID = ImportRef.JE_HEADER_ID AND GLLines.JE_LINE_NUM
SELECT
ImportRef.GL_SL_LINK_ID, ImportRef.GL_SL_LINK_TABLE, Combos.Segment5
FROM GL_IMPORT_REFERENCES ImportRef
JOIN GL.GL_JE_LINES GLLines
ON GLLines.JE_HEADER_ID = ImportRef.JE_HEADER_ID
AND GLLines.JE_LINE_NUM = ImportRef.JE_LINE_NUM
JOIN GL.GL_CODE_COMBINATIONS Combos
ON Combos.CODE_COMBINATION_ID = GLLines.CODE_COMBINATION_ID
JOIN XLA.XLA_AE_LINES XLAL
ON ImportRef.GL_SL_LINK_ID = XLAL.GL_SL_LINK_ID
AND ImportRef.GL_SL_LINK_TABLE = XLAL.GL_SL_LINK_TABLE
WHERE
Combos.Segment1 = '310'
AND GLLines.PERIOD_NAME IN ('10-13')
AND ImportRef.GL_SL_LINK_ID != 352258267
AND ImportRef.GL_SL_LINK_ID != 248391353
ORDER BY GL_SL_LINK_ID;
它在几秒钟内运行并返回44000行
如果我移除了
AND ImportRef.GL_SL_LINK_ID != 352258267
AND ImportRef.GL_SL_LINK_ID != 248391353
它被卡住了,需要很长时间才能跑完,我不得不放弃。看着表中的这些行,我看不出它们有什么特别之处。你知道为什么两个看似随机的行会对查询产生如此大的影响吗
答复意见
我最初是通过SQL Server中的OPENQUERY运行查询的,它将行返回到这些行,然后作为一个测试被“卡住”,我只是排除了下一条记录,然后它突然工作了
XLA_AE_线上有一个索引XLAL as
关于GL_SL_LINK_ID和GL_SL_LINK_表
回应西蒙·克林格
快速查询
Operation Object Name Rows Bytes Cost SELECT STATEMENT Optimizer Mode=ALL_ROWS 27 K 1410564 SORT ORDER BY 27 K 1 M 1410564
NESTED LOOPS 27 K 1 M 1410078
NESTED LOOPS 22 K 1 M 117603
NESTED LOOPS 8 K 317 K 64956
TABLE ACCESS BY INDEX ROWID GL.GL_CODE_COMBINATIONS 7 K 119 K 349
INDEX RANGE SCAN GL.GL_CODE_COMBINATIONS_N1 7 K 23
TABLE ACCESS BY INDEX ROWID GL.GL_JE_LINES 1 23 10
INDEX RANGE SCAN GL.GL_JE_LINES_N1 19 3
TABLE ACCESS BY INDEX ROWID GL.GL_IMPORT_REFERENCES 3 63 8
INDEX RANGE SCAN GL.GL_IMPORT_REFERENCES_N1 23 3
PARTITION LIST ALL 1 14 57
INDEX RANGE SCAN XLA.XLA_AE_LINES_N4 1 14 57
慢查询
操作对象名称行字节成本
SELECT STATEMENT Optimizer Mode=ALL_ROWS 74 K 2630601
SORT ORDER BY 74 K 5 M 2630601
HASH JOIN 74 K 5 M 2629290
NESTED LOOPS
NESTED LOOPS 59 K 3 M 117602
NESTED LOOPS 8 K 317 K 64956
TABLE ACCESS BY INDEX ROWID GL.GL_CODE_COMBINATIONS 7 K 119 K 349
INDEX RANGE SCAN GL.GL_CODE_COMBINATIONS_N1 7 K 23
TABLE ACCESS BY INDEX ROWID GL.GL_JE_LINES 1 23 10
INDEX RANGE SCAN GL.GL_JE_LINES_N1 19 3
INDEX RANGE SCAN GL.GL_IMPORT_REFERENCES_N1 23 3
TABLE ACCESS BY INDEX ROWID GL.GL_IMPORT_REFERENCES 7 147 8
PARTITION LIST ALL 355 M 4G 1999069
INDEX FULL SCAN XLA.XLA_AE_LINES_N4 355 M 4G 1999069
最大的区别似乎是在最后从范围扫描切换到完全扫描我可以理解为什么这会减慢速度,但不确定为什么会这样变化,有什么想法吗?在44000行中,您如何确定这两行是问题行?向我们展示您的数据库模式。GL_SL_LINK_ID是主键或索引?我能想到的是,在XLA_AE_行中有许多行用于这些ID。我不知道,你为什么要和那张桌子坐在一起;我没有看到它在任何限制中或在您的实际选择中返回?我检查了那些ID,两者都只返回一条记录。我写的实际查询还有很多,我只是把它减少到最小,以突出我的问题。请提供快速和慢速查询的执行计划。在那里你应该看到发生了什么。