Выполняюся запросы с указанием плана.
Возвращать большое количество не требуется, нужна первая тысяча и по where ее не ограничить.
Select count выполняться будет очень долго.
SELECT count(*) FROM EJOU where ejstate = 0 PLAN (EJOU NATURAL)
вернул 0
План
PLAN (EJOU NATURAL)
------ Performance info ------
Prepare time = 0ms
Execute time = 3m 7s 141ms
Avg fetch time = 187 141,00 ms
Current memory = 50 668 484
Max memory = 100 338 912
Memory buffers = 2 048
Reads from disk to cache = 651 367
Writes from cache to disk = 6
Fetches from cache = 102 197 672
SELECT count(*) FROM EJOU where ejstate = 0
План
PLAN (EJOU INDEX (EJOU_IDX2))
------ Performance info ------
Prepare time = 0ms
Execute time = 0ms
Avg fetch time = 0,00 ms
Current memory = 50 668 568
Max memory = 100 338 912
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 6
Fetches from cache = 207
SELECT count(*) FROM EJOU where ejstate = 2
вернул 1
План
PLAN (EJOU INDEX (EJOU_IDX2))
------ Performance info ------
Prepare time = 0ms
Execute time = 0ms
Avg fetch time = 0,00 ms
Current memory = 50 668 788
Max memory = 100 338 912
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 6
Fetches from cache = 210
SELECT count(*) FROM EJOU where ejstate = 2 PLAN (EJOU NATURAL)
План
PLAN (EJOU NATURAL)
------ Performance info ------
Prepare time = 0ms
Execute time = 2m 58s 328ms
Avg fetch time = 178 328,00 ms
Current memory = 50 668 484
Max memory = 100 338 912
Memory buffers = 2 048
Reads from disk to cache = 651 367
Writes from cache to disk = 6
Fetches from cache = 102 197 672
Суть проблемы в том, нельзя предсказать как выполнять запрос, ведь даже используя например
Код: Выделить всё
CREATE PROCEDURE EJOU_EXISTS (
IEJSTATE INTEGER)
RETURNS (
RESULT INTEGER)
AS
BEGIN
IF (EXISTS (SELECT * FROM EJOU EJ
WHERE EJ.EJSTATE=:IEJSTATE)) THEN
RESULT=1;
ELSE
RESULT=0;
SUSPEND;
END
выполнение будет зависеть от того есть искомое значение в таблице или нет и в том и проблема если значение есть - выполнять быстрее натуралом, если значения нет - нужен индекс. Как узнать как выполнять запрос с индексом или без или как еще?