2010-04-07 2 views
1

Zend_Paginator를 사용하기 시작 했으므로 잘 작동하지만로드 시간이 느려지는 쿼리가 하나 더 있음을 발견했습니다. 추가 질의 :Zend_Paginator - 쿼리 증가

SELECT COUNT(1) AS `zend_paginator_row_count` FROM `content` 

정상적인 쿼리

SELECT `content`.`id`, `content`.`name` FROM `content` LIMIT 2 

PHP :

$adapter = new Zend_Paginator_Adapter_DbSelect($table->select()->from($table, array('id', 'name'))); 
$paginator = new Zend_Paginator($adapter); 

내가 하나 (더 나은 성능을 위해)에 두 querys를 병합 할 수 있을까요?

답변

0

둘을 병합해도 성능이 크게 향상되지는 않습니다. 실제 select 내용에는 데이터베이스의 모든 행을 세는 데 필요한 개수 (데이터베이스에서 전체 테이블의 서브 세트를 얻으려고 할 때)에 한계 문이 들어 있습니다. 이렇게하는 이유는 간단히 카운트를 얻기 위해 매우 큰 데이터 집합을 선택하지 않아야하기 때문입니다.

1

선택한 테이블의 하나 이상의 int 기반 열에 인덱스가 있는지 확인하십시오. 그래서 카운트 쿼리는 성능면에서별로 중요하지 않습니다. setRowCount()을 사용하여 개수를 제공 할 수 있습니다 (있는 경우). http://framework.zend.com/manual/en/zend.paginator.usage.html 가입일

:

참고 대신 주어진 쿼리마다 일치하는 행을 선택하는 상기 DbSelect 및 DbTableSelect 어댑터 는 현재 페이지를 표시하기위한 데이터의 최소량 필요한 검색. 이 때문에 두 번째 쿼리는 동적으로 으로 생성되어 일치하는 행의 수인 을 결정합니다. 그러나 은 직접 카운트를 제공하거나 쿼리를 직접 카운트 할 수 있습니다. 에 대한 자세한 내용은 DbSelect 어댑터의 setRowCount() 메서드를 참조하십시오.

+0

이미'id' 행에 기본 색인이 있습니다. – Poru