2017-03-29 1 views
0

이러한 솔루션 중 하나가 객관적으로 더 좋습니까? 아니면 모두 데이터에 따라 다릅니 까? Explain 옵션은 실제로 옵티마이 저가 쿼리를 다르게 처리한다는 것을 보여줍니다. 이것은 단지 예일 뿐이므로 응용 프로그램에서 이러한 쿼리를 많이 할 것이므로 이러한 필터링을 수행하는 가장 좋은 방법을 알고 싶습니다.그래프 쿼리 - 어디서 확장 확장 선택

SELECT * 
FROM 
    (SELECT expand(in('hasPermission')) 
    FROM Permission 
    WHERE type IN ['USER']) 
WHERE 
    login >="admin" 
ORDER BY 
    login ASC 
LIMIT 3 

SELECT * 
FROM User 
WHERE login >= "admin" 
    AND out("hasPermission").type IN ["USER"] 
ORDER BY login ASC 
LIMIT 3 

답변

1

도메인에 많이 달려 있습니다. v 2.2의 u 리 옵티 마이저가 목표 클래스 (첫 x 째 u 리에서는 권한, 두 x 째 u 리에서는 g 용자)에서 스 5 (또는 u 리 인덱스 시작)을 시작한 다음 트래 v 스를 진행하는 것으로 간주하십시오.

type 속성에 "USER"가있는 권한 레코드가 거의없고 권한 당 들어오는 가장자리 수가 적 으면 첫 번째 쿼리가 더 효율적입니다. type

login> "admin"(다시 색인이 있음) 사용자가 거의없고 단일 사용자 당 나가는 가장자리 수가 적 으면 두 번째 쿼리가 더 효율적입니다. .

+0

제가 의심하는 바가 있습니다. 쿼리 최적화 프로그램의 내부 동작을 설명해 주셔서 감사합니다. –

+0

아, 이것도 쿼리 피벗이라고합니다. 두 번째 쿼리의 경우이 종류의 쿼리에 맞는 복합 인덱스를 만들 수 있습니까? –

+0

아니요, 안타깝게도 "connected"요소의 인덱스는이 경우 사용되지 않습니다. 즉. Permission.type의 인덱스는 두 번째 쿼리에서 사용되지 않습니다. –