У меня есть таблица базы данных PostgreSQL с определенными столбцами text[]
(массив). Я использую эти столбцы для поиска определенной записи в базе данных следующим образом:
select obj from business
where ((('street' = ANY (address_line_1)
and 'a_city' = ANY (city)
and 'a_state' = ANY (state))
or ('street' = ANY (address_line_1)
and '1234' = ANY (zip_code)))
and ('a_business_name' = ANY (business_name)
or 'a_website' = ANY (website_url)
or array['123'] && phone_numbers))
Проблема, с которой я сталкиваюсь, заключается в том, что с примерно 1 миллионом записей запрос становится очень медленным. Мой вопрос прост: столбцы массива имеют разные типы индексов? Кто-нибудь знает лучший тип индекса для создания в этом случае? (Предполагая, что существуют разные типы).
На всякий случай вот ответ explain analyze
:
"Seq Scan on business (cost=0.00..207254.51 rows=1 width=32) (actual time=18850.462..18850.462 rows=0 loops=1)"
" Filter: (('a'::text = ANY (address_line_1)) AND (('a'::text = ANY (business_name)) OR ('a'::text = ANY (website_url)) OR ('{123}'::text[] && phone_numbers)) AND ((('a'::text = ANY (city)) AND ('a'::text = ANY (state))) OR ('1234'::text = ANY (zip_code))))"
" Rows Removed by Filter: 900506"
"Total runtime: 18850.523 ms"
Заранее спасибо!