2015-01-26 3 views
0

Я пытаюсь выяснить, почему выполнение SQL-запросов занимает такое долгое время. Это противоречит двум таблицам, и оба они имеют значительный размер, но не настолько велики, чтобы гарантировать любую задержку. Это:Interbase 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, чтобы избавиться от задержки.

+0

В какое время точно? –

+0

Время выполнения составляет не менее 20 секунд, чтобы вернуть одну запись. Если выполняется два метода SQL-оператора, он мгновенно выполняет два оператора. –

+0

HAve вы протестировали без утверждения 'rows 1'? –

ответ

1

Я решил проблему. Я изменил INNER-соединение на LEFT-соединение, и теперь он работает мгновенно со следующим планом, который теперь использует индекс AH:

PLAN JOIN (AH INDEX (IDXHISTBATCHCONTROL),PM INDEX (RDB$PRIMARY405)) 

Adapted Plan 
PLAN JOIN (AH INDEX (IDXHISTBATCHCONTROL),PM INDEX (PK_MASTERS)) 
Смежные вопросы