Столкнулся со странной работой с индексами. Поправьте пожалуйста, что я делаю не так.
Есть таблица
В таблице примерно 170 тыс. записей.
1. Выполняю запрос типа
Получаю вот такой план PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))
и статистку
2. Выполняю запрос типа
Получаю вот такой план PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))
и статистку
3. Но если выполнить запрос типа
Получаю вот такой план PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))
и статистку
Вопрос, почему в вариантах 2 и 3 такая разница в скорости и почему вариант 2 так долго выполняется?
Есть таблица
CREATE TABLE T_CUSTOMER_CONFIRM_ITER1 ( ID D_ID /* D_ID = BIGINT NOT NULL */, D_ADD D_DT /* D_DT = TIMESTAMP DEFAULT CURRENT_TIMESTAMP */, ROW_ID D_CH21 /* D_CH21 = VARCHAR(21) */, ITER_ID D_CH21 /* D_CH21 = VARCHAR(21) */, STATE D_CH20 /* D_CH20 = VARCHAR(21) */, NOTE D_CH1024 /* D_CH1024 = VARCHAR(1024) */, SR_NUMBER D_CH21 /* D_CH21 = VARCHAR(21) */ ); ALTER TABLE T_CUSTOMER_CONFIRM_ITER1 ADD CONSTRAINT PK_T_CUSTOMER_CONFIRM_ITER1 PRIMARY KEY (ID); CREATE INDEX T_CUSTOMER_CONFIRM_ITER1_IDX1 ON T_CUSTOMER_CONFIRM_ITER1 (ITER_ID); CREATE INDEX T_CUSTOMER_CONFIRM_ITER1_IDX2 ON T_CUSTOMER_CONFIRM_ITER1 (STATE);
В таблице примерно 170 тыс. записей.
1. Выполняю запрос типа
select * from T_CUSTOMER_CONFIRM_ITER1 where state='Назначено'
Получаю вот такой план PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))
и статистку
------ Информация о производительности ------ Время подготовки запроса = 297ms Время выполнения запроса = 31ms Current memory = 245 924 200 Max memory = 344 115 728 Memory buffers = 2 048 Reads from disk to cache = 59 Writes from cache to disk = 24 Чтений из кэша = 0
2. Выполняю запрос типа
select * from T_CUSTOMER_CONFIRM_ITER1 where state='В процессе'
Получаю вот такой план PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))
и статистку
Время подготовки запроса = 187ms Время выполнения запроса = 27s 722ms Current memory = 246 139 168 Max memory = 344 115 728 Memory buffers = 2 048 Reads from disk to cache = 13 287 Writes from cache to disk = 5 076 +--------------------------+-----------+-----------+-------------+---------+---------+---------+ | Table Name | Records | Indexed | Non-Indexed | Updates | Deletes | Inserts | | | Total | reads | reads | | | | +--------------------------+-----------+-----------+-------------+---------+---------+---------+ | T_CUSTOMER_CONFIRM_ITER1| 0 | 58841 | 0 | 0 | 0 | 0 | +--------------------------+-----------+-----------+-------------+---------+---------+---------+
3. Но если выполнить запрос типа
select * from T_CUSTOMER_CONFIRM_ITER1 where state starting with 'В процессе%'
Получаю вот такой план PLAN (T_CUSTOMER_CONFIRM_ITER1 INDEX (T_CUSTOMER_CONFIRM_ITER1_IDX2))
и статистку
------ Информация о производительности ------ Время подготовки запроса = 125ms Время выполнения запроса = 0ms Current memory = 245 785 008 Max memory = 344 115 728 Memory buffers = 2 048 Reads from disk to cache = 173 Writes from cache to disk = 52 Чтений из кэша = 0
Вопрос, почему в вариантах 2 и 3 такая разница в скорости и почему вариант 2 так долго выполняется?