간단하게하려고 노력한다. Model.all.page(1)
.page가 호출 될 때마다, 그것은 SQL COUNT 호출을 만든다. (실제 코드는 위의 코드보다 복잡하지만 읽기가 쉽도록 단순화되었습니다.) .page가 SQL 개수를 호출하지 못하게하는 방법이 있습니까? 나는 수백만 개의 제품을 다루고 있는데,이 호출은 페이지 새로 고침을로드하는 데 2 초가 걸리게하는 것입니다. 나는 이미 내 자신의 커스텀 카운트를 가지고 있으므로이 페이징 카운트는 필요 없다.레일즈 .page 모델 호출 또한 count를
편집 : Def .all을 사용하지 마십시오. 나쁜 예가 미안해. 기본적으로 내 한마디에 코드
Heres는 정말 간단한 예 : 내 진짜 코드를 SQL로 Product.limit(1).page(1)
는 생산 : (1495.3ms) SELECT COUNT(*) FROM 'products' LEFT OUTER JOIN...
내가 가진 내가 할 필요가없는 제품의 테이블에 조인 따라서 내가 사용하고자하는 자체 카운트 방법이 있으며 실제로 .page를 생성하지 않아도됩니다.
을 직접'page' 방법을 사용하는 이유는 무엇입니까? 일반적으로'paginate' 메소드를 사용합니다. will_paginate가 사용할 수있는 다른 메소드를 제공하면': total_entries' 옵션을 사용하여이를 전달할 수 있습니다. 'Model.paginate (: page => 1, : total_entries => 50)' –
당신이 생각하는 진술 문에 의해 COUNT 쿼리가 생성되지 않았는지 확실히 확인하십시오. 페이지 매김과 관련된 내용이지만 다른 문구 일 가능성이 있습니다. 너에게 페이지 매김을 만들기 위해 총 페이지 수를 계산하려고하는 것. 전체 이슈를 #page 호출까지 100 % 추적 했습니까? 그렇다면 어떻게? –
@HeliosdeGuerra, .page와 .per_page 옵션을 모두 전달할 수 있습니다. 둘 다 페이지 매김 결과를 제공하지만 모두 COUNT 쿼리 결과가됩니다. TanelSuurhans 글쎄, 내가 Product 또는 User 또는 Model.limit (1) .page (1)를 수행 할 때 SQL COUNT 호출을 삽입하는 데 100 % 그것이 추적되었다고 말할 것입니다.나는 그것을 추적 할 다른 방법을 모른다. 내가 Model.page (1)을 수행하더라도 질의 된 정보와 함께 sql 카운트를 반환하지만 모든 제품 (디버깅하는 동안 분명히 피할 수 있음)을 처리한다. –