И так есть не сложный запрос:
select * from a_packet_list where UPPER(packet_list_id_) LIKE 'B202003152304123%' order by create_date_ desc limit 10;
вот его план выполнения:
"Limit (cost=0.04..716.64 rows=10 width=5248) (actual time=651.613..27831.327 rows=1 loops=1)"
" -> Index Scan Backward using a_packet_list_create_date__idx on a_packet_list (cost=0.04..545398.44 rows=7611 width=5248) (actual time=651.606..27831.313 rows=1 loops=1)"
" Filter: ((dispatch_id_ IS NULL) AND (upper((packet_list_id_)::text) ~ '^(?:B202003152304123.*)$'::text))"
" Rows Removed by Filter: 11347762"
"Planning time: 0.713 ms"
"Execution time: 27831.433 ms"
вотпрос, почему СУБД применяет только 1 индекс a_packet_list_create_date__idx, но не использует индекс для столбца: packet_list_id_ ?
Покажите лучше EXPLAIN (ANALYZE, BUFFERS) (лучше на https://explain.depesz.com/) и \d таблицы (у Вас индекс-то на UPPER(packet_list_id_) есть?).
Обсуждают сегодня