Interbase SQL 需要很长时间才能执行
Interbase SQL taking long time to execute
我想弄清楚为什么 SQL 语句执行需要这么长时间。它针对两个表,两个表都很大,但不足以保证任何延迟。它是:
Select pm.Type
From History ah
inner join Masters pm on pm.MasterUID=ah.MasterUID
where ah.ControlUID= '1891' rows 1
显示的计划是:
PLAN JOIN (PM NATURAL,AH INDEX (IDXPROPMASTER,IDXHISTBATCHCONTROL))
所有这些字段都在各自的表中编制了索引。当我将 SQL 分成两步时,它运行很快并且确实使用了 PM 索引计划:
Select ah.masteruid from history ah where ah.controluid = '1891'
PLAN (AH INDEX (IDXHISTBATCHCONTROL))
Select pm.taxtype from masters pm where pm.masteruid = '1760'
PLAN (PM INDEX (RDB$PRIMARY405))
Adapted Plan
PLAN (PM INDEX (PK_MASTERS))
我的问题是如何提高第一个SQL的速度来摆脱延迟。
我解决了这个问题。我将 INNER 连接更改为 LEFT 连接,它现在使用以下计划即时运行,该计划现在使用 AH 索引:
PLAN JOIN (AH INDEX (IDXHISTBATCHCONTROL),PM INDEX (RDB$PRIMARY405))
Adapted Plan
PLAN JOIN (AH INDEX (IDXHISTBATCHCONTROL),PM INDEX (PK_MASTERS))
我想弄清楚为什么 SQL 语句执行需要这么长时间。它针对两个表,两个表都很大,但不足以保证任何延迟。它是:
Select pm.Type
From History ah
inner join Masters pm on pm.MasterUID=ah.MasterUID
where ah.ControlUID= '1891' rows 1
显示的计划是:
PLAN JOIN (PM NATURAL,AH INDEX (IDXPROPMASTER,IDXHISTBATCHCONTROL))
所有这些字段都在各自的表中编制了索引。当我将 SQL 分成两步时,它运行很快并且确实使用了 PM 索引计划:
Select ah.masteruid from history ah where ah.controluid = '1891'
PLAN (AH INDEX (IDXHISTBATCHCONTROL))
Select pm.taxtype from masters pm where pm.masteruid = '1760'
PLAN (PM INDEX (RDB$PRIMARY405))
Adapted Plan
PLAN (PM INDEX (PK_MASTERS))
我的问题是如何提高第一个SQL的速度来摆脱延迟。
我解决了这个问题。我将 INNER 连接更改为 LEFT 连接,它现在使用以下计划即时运行,该计划现在使用 AH 索引:
PLAN JOIN (AH INDEX (IDXHISTBATCHCONTROL),PM INDEX (RDB$PRIMARY405))
Adapted Plan
PLAN JOIN (AH INDEX (IDXHISTBATCHCONTROL),PM INDEX (PK_MASTERS))