ORM 때문에 N + 1 문제로 인해 응용 프로그램이 손상되었다는 것을 알고 나면 수행 할 수있는 개선 사항에 대한 자세한 정보와 N + 1 문제로 개선되기 전과 비교 된 시간.
그런 개선 전후의 시간차는 어떻게됩니까?
누구든지 문제를 분석하고 통계를 검색하는 일부 종이에 대한 링크를 제공 할 수 있습니까?레일스 : N + 1 문제 ... 통계 데이터 필요
3
A
답변
4
통계 데이터가 필요하지 않습니다. 단지 수학입니다. N + 1 (이상 1 + N)의 기록을 얻을 수
- 1 쿼리를 의미하고,
- N 쿼리는 모든 레코드는 더 큰 N은의이다
과 관련된 얻을 특히 쿼리가 네트워크를 통해 원격 데이터베이스로 전송되는 경우 성능이 저하됩니다. 그렇기 때문에 N + 1 문제가 계속 발생하여 DB에 데이터가 거의없는 개발 모드에서는 대개 중요하지 않지만 생산량이 수천 또는 수백만 행으로 늘어남에 따라 쿼리가 서버를 천천히 막습니다.
대신 모든 관련 기록
첫 번째 쿼리 것을 위해 (조인을 통해)
- 단일 쿼리 또는
- 2 쿼리 (주 레코드에 대해 하나 하나를 사용할 수 있습니다 (첫 번째 레코드의 데이터가 각 행에 복제 될 것입니다) 엄격하게 필요한 것보다 많은 데이터를 반환하지만 대개는 만드는 것이 좋습니다. 두 번째 쿼리는 모든 외래 키가 다음과 같이 전달되기 때문에 큰 데이터 세트에 대해서는 약간 번거로울 수 있습니다. 단일 범위이지만, 다시 일반적으로 가치있는 거래.
실제 수치는 통계가 의미가있는 변수가 너무 많습니다. 번호 또는 레코드, DB 버전, 하드웨어 등
레일즈로이 질문에 태그를 붙 였으므로 ActiveRecord는 N + 1 쿼리를 사용하는 것을 피하는 것이 좋습니다. eager loading에 대한 설명을 확인하십시오.
0
N + 1 문제로 인해 얼마나 많은 추가 선택이 수행되었는지에 따라 시차가 발생합니다. 여기에 N + 1에 대한 또 다른 stackoverflow question에게 주어진 대답에서 인용 한의 -
견적 즉
SELECT * FROM Cars;
/* for each car */
SELECT * FROM Wheel WHERE CarId = ?
를 시작, 당신은 N은이고, N 추가 선택 후 자동차에 대한 하나를 선택하고,이 총 차수.
는 시간 차이 위의 예에서견적 종료가 많은 자동차 기록이 때마다 코드를 '휠'테이블을 조회하는 데 걸린 시간을 데이터베이스에 있던 방법에 따라 달라
/ORM은 새 레코드를 가져 . 자동차 기록이 2 개인 경우 N + 1 문제를 제거한 후 그 차이는 무시해도 좋을지 만, 자동차 기록이 100 만 개라면 큰 영향을 미칩니다.
관련 문제
- 1. 모델링 1-N 문제
- 2. 레일스 - escape_javascript가 없어도 \ n \ n \ n \ n \ n
- 3. N + 1 + N + 1 + ... + N + 1 + N + 1에서 N (N + 1)을 어떻게 얻습니까?
- 4. Nhibernate N + 1 쿼리 문제
- 5. 이것이 n + 1 문제일까요?
- 6. : T (N) = T (N - 1) + N
- 7. 최대 절전 모드 기준 n + 1 문제
- 8. n-Tier 아키텍처 피드백 필요
- 9. 파일에 기록을 비교 및보고 통계 - 시나리오 1
- 10. N + 1 유형의 검색어?
- 11. 1-n 관계
- 12. Fluent NHibernate 선택 n + 1
- 13. 데이터베이스에서 1 : 1..n 관계 모델링
- 14. 안드로이드 데이터 통계
- 15. 일대일 연결 문제, NHProf 선택 N + 1 경고 표시, FetchMode.Join을 사용하지 않는 기준 변경 N + 1 문제 해결 안 함?
- 16. Django N + 1 쿼리 솔루션
- 17. 쿼리의 n-1 행을 선택하십시오.
- 18. N을-1> N 청
- 19. 레일에서 N + 1 쿼리 방지
- 20. N : 파일 기술자 1 개?
- 21. Devise 플러그인의 문제. (레일스)
- 22. criteria.List()를 호출 할 때 귀찮은 N + 1 문제
- 23. LINQ to SQL 연결 1 - N
- 24. 레일스 has_many 메타 데이터
- 25. 레일스 3의 HTML 데이터 테이블
- 26. 왜 C++에서 [n] [n]으로 선언 한 후 [1] [1] 표현식을 볼 수 없습니까?
- 27. 레일스 조건 선언문 문제
- 28. 감사 및 통계 데이터 수집
- 29. R 통계 : 간단한 열 벡터 문제
- 30. 레일스 활성 레코드 지속 문제