мой запрос не забирает созданный индекс - PullRequest
0 голосов
/ 22 июня 2019

Я создал индекс с именем 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)
...