Я создал индекс с именем user_type_index
мой запрос:
User.where("user_type IN (:user_types)", user_types: user_types)
user_types = ['super_admin', 'system_admin']
, хотя user_type имеет индекс, этот запрос выполняется последовательно.
попытался удалить и создать индекс, но все равно бесполезно
class User < ActiveRecord::Base
def matching_with_user_types
where("user_type IN (:user_types)", user_types: user_types)
end
end
user_types = ['super_admin', 'system_admin']
User.matching_with_user_types(user_types).explain
ниже выводится:
Seq Scan on users (cost=0.00..11.75 rows=2 width=537)
Filter: ((user_type)::text = ANY ('{super_admin,system_admin}'::text[]))
(2 rows)
ожидается: запрос с использованием индекса
актуально: последовательный запрос
Запрос PostgreSQL
Выборка записей, соответствующих всем
EXPLAIN SELECT id FROM "users" WHERE (user_type IN ('super_admin','system_admin','network','super'));
QUERY PLAN
--------------------------------------------------------------------------------------
Seq Scan on users (cost=0.00..3039.28 rows=75228 width=377)
Filter: ((user_type)::text = ANY ('{'super_admin','system_admin','network','super'}'::text[]))
(2 rows)
Выборка записей, соответствующих одному:
EXPLAIN SELECT id FROM "users" WHERE (user_type IN ('super_admin'));
QUERY PLAN
--------------------------------------------------------------------------------------
Seq Scan on users (cost=0.00..2789.24 rows=25418 width=377)
Filter: ((user_type)::text = ANY ('{'super_admin'}'::text[]))
(2 rows)