2012-01-27 4 views
1

나는 10 개의 필드가있는 9000 개 이상의 행을 가진 MySQL 데이터베이스를 가지고있다. Excel 파일에서 가져 와서 하나의 테이블에 모두 포함 시켰습니다.데이터베이스 프로세스의 속도를 높이려면 어떻게해야합니까?

이미 선택 항목이 좁혀진 쿼리를 실행하면 Codeigniter보기 페이지로 돌아가는 7000 개의 행이 생성됩니다. 브라우저는 30 초 동안 정지하고 응답이 없으므로 페이지를 죽이라는 메시지를 표시합니다. 기다리면 결과가 결국 표시됩니다. 이 문제를 개선 할 방법이 있는지 궁금합니다.

+6

+1에 추가하십시오. 요점 : 당신은 페이지 매김을 시도 했습니까? –

+0

어떤 종류의 ORM을 사용하고 있다면이 수의 레코드로 인해 속도가 느려집니다. 많은 수의 레코드를 나열해야하고 페이지 매김을 원하지 않으면 직접 데이터베이스 호출을 사용하십시오. – halfer

+1

Jerry는 @Justin이 당신이 정말로 그 결과를 통해 페이징을 고려할 필요가 있다고 지적했습니다. HTML과 자바 스크립트의 복잡성에 따라 어떤 브라우저에서도 1000을 렌더링하는 것은 좋은 생각이 아니며 여러분이 언급하는 것처럼 할 수 있습니다. 그래서 7000은 확실히 문제가 될 것입니다. 오른쪽 마음에 누가 플러스 7,000 행을 통해 스크롤하려고합니다. – spinon

답변

1

어떤 종류의 루프에서 쿼리를 실행하고 있습니까?

페이지 매김 대답에 동의하면 제한 및 오프셋을 사용하십시오. 당신이 10per 페이지 thats 700 쿼리를 실행하는 경우. 나는 codeigniter의 페이지 매김 라이브러리를 다음과 같이 사용할 것이다.

$route['controller/(:num)'] = 'controller/index/$1'; 

-

public function index($offset=0) 
{ 

    //set a limit of 10 per result 
    $limit = 10; 

    //query the database 
    $q = "SELECT * FROM {table_name} LIMIT={limit} OFFSET={offset} ORDER BY {date} desc"; 

    //count the results 
    $count = count({query results}); 

    //setup pagination config 
    $config = array(
     'base_url' => site_url('controller/'), 
     'total_rows' => $count, 
     'per_page' => $limit, 
     'uri_segment' => 2 
    ); 

    //init the pagigination 
    $this->pagination->initialize($config); 

    //load the view and pagination data 
    $this->load->view('link_to_template', array(
      'pagination' => $this->pagination->create_links(), 
      'results' => {query results} 
    )); 

} 
+0

페이지 네이션 가이드를 보내 주셔서 감사합니다. – FlyingCat

1

더 나은 검색어를 제안하거나 사용자에게 더 나은 검색어를 제공하는 것이 이상적입니다. 궁극적으로 7000 행을 모두 살펴 봐야한다면 일종의 페이징이 필요합니다. 한 옵션은 this article에서 설명한 AJAX 페이징입니다. 기본적으로 각 행 그룹에 대해 새로운 요청이 있지만 사용자는 동일한 페이지에 머물러 있습니다.

+0

링크를 제공해 주셔서 감사합니다. 나를 위해 매우 유용합니다. – FlyingCat

1

sql의 '제한'에 대한 읽기부터 시작하여 출력에 페이지 매기기를 수행하십시오.

1

특정 컬럼에 대한 인덱스 (인덱스)를 추가; 열이 텍스트 인 경우 FULLTEXT 인덱스를 "9000 이상"에 대해

관련 문제