У меня есть два выбора на одном экране.Один выбор будет отфильтрован с помощью первичного ключа, другой выбор будет отфильтрован по неуникальному индексу.Используемый вид сложен.Для выбора с помощью первичного ключа требуется около 15 секунд.Для выбора с неуникальным индексом требуется 0,5 секунды.
Почему запрос, использующий первичный ключ, настолько медленный?
Я использую "EXPLAIN PLAN FOR", чтобы создать план выполнения дляи то и другое.
План выполнения для быстрого выбора: Быстрый выбор
План выполнения для быстрого выбора: Медленный выбор
--Pseudocode
create table TableA
(
ID number, --(Primary Key)
ProjectID number, --(Not unique index)
TableB_id number, --(Foreign Key to Table TableB)
TableC_id number, --(Foreign Key to Table TableC)
TableD_id number --(Foreign Key to Table TableD)
);
Create view viewX
as
Select
ID as TableB_ID,
0 as TableC_ID,
0 as TableD_ID,
Value1,
Value2
from TableB
union all
Select
0 as TableB_ID,
ID as TableC_ID,
0 as TableD_ID,
Value1,
value2
from TableC
union all
Select
0 as TableB_ID,
0 as TableC_ID,
id as TableD_ID,
value1,
value2
from viewz;
Create view viewA
as
Select
t.id,
t.ProjectID,
x.TableB_ID,
x.TableC_ID,
x.TableD_ID
from TableA t
inner join viewX x
on t.TableB_ID = x.TableB_ID and
t.TableC_ID = x.TableC_ID and
t.TableD_ID = x.TableD_ID;
--this select needs o,5 seconds
Select *
from ViewA
where ProjectID = 2220;
--this select needs 15 seconds
Select *
from viewA
where id = 5440;
Выбор в TableA и ViewX по отдельности быстр.
--this select needs 0,5 seconds
select *
from TableA
where id = 5440;
Result: ID = 5440, ProjektID = 2220, TableB_ID = 123, TableC_ID = 5325, TableD_ID = 7654
--this select needs 0,3 seconds
Select *
viewX x
where TableB_ID = 123 and
TableC_ID = 5325 and
TableD_ID = 7654;
Спасибо за вашу поддержку