나는 postgres EXPLAIN
출력에서 어떤 의미를 만들려고합니다. 다양한 시나리오에 인덱스를 넣을 위치를 배우고 싶습니다.Postgres EXPLAIN 및 인덱스를 넣을 곳
한 예는 다음과 같습니다
EXPLAIN for: SELECT "users".* FROM "users" INNER JOIN "user_sessions" ON "user_sessions"."user_id" = "users"."id" WHERE "user_sessions"."token" = $1 AND (user_sessions.expires_at > '2017-09-29 08:56:26.388291') [["token", "foo"]]
나 제공합니다 :
Nested Loop (cost=0.30..16.35 rows=1 width=192)
-> Index Scan using index_user_sessions_on_token on user_sessions (cost=0.15..8.17 rows=1 width=4)
Index Cond: ((token)::text = 'foo'::text)
Filter: (expires_at > '2017-09-29 08:56:26.388291'::timestamp without time zone)
-> Index Scan using users_pkey on users (cost=0.15..8.17 rows=1 width=192)
Index Cond: (id = user_sessions.user_id)
가 단일 인덱스 [user_id, token, expires_at]
이 user_id
와 [token, expires_at]
두 개의 인덱스에 비해 "더"적합 할 것인가?
참고 : 일치하는 user_sessions 행이 두 개 이상있는 경우 검색어가 중복됩니다. (EXISTS() 구조를 사용하는 것이 좋습니다) – joop