2015-01-21 3 views
-3

같은 열 수 (예 : Id, 이름, 타임 스탬프)가있는 10 개의 테이블이 mysql에 있습니다. 각 테이블에는 약 1 백만 개의 레코드가 들어 있습니다. 모든 테이블의 통합 된 데이터를 한 곳으로 보여줘야합니다. 페이지가 매겨진 데이터를 타임 스탬프별로 정렬하는 가장 좋은 방법은 무엇입니까? 예를 들어, 페이지 번호 4와 페이지 크기 25를 표시해야한다면, 단일 테이블에있는 것처럼 타임 스탬프별로 정렬 된 76 번째에서 100 번째 레코드를 얻어야합니다. 내가 (4 페이지)로 작성한MySql, Pagination

:이 (100 개까지) 작은 페이지 크기에 잘 작동하지만> (20)에 대한 매우 느립니다

select * from (
       (
       Select * from TABLE1 limit 0,100 
       ) 
       UNION (
       Select * from TABLE2 limit 0,100 
       ) 
       UNION (
       Select * from TABLE3 limit 0,100 
       ) 
       UNION (
       Select * from TABLE4 limit 0,100 
       ) 
      ) t 
limit 75,25 

. 어떻게 개선 될 수 있습니까? 그렇게 할 또 다른 방법이 있습니까?

미리 감사드립니다.

+0

ElasticSearch 사용 : -} – Ashalynd

+0

제 생각에는 10 페이지 이상의 페이지 매김을 최적화하는 데 시간을 낭비하지 말고 사용자 친화적 인 필터링을 목표로 삼 으십시오. 100 개 항목/줄로 10 페이지를 넘는 사용자 한 명을 보여주십시오. – Filburt

답변

0

우선, 전체 결과 대신 각 테이블에 매김을 지정합니다. '

SELECT * FROM (
    SELECT * FROM table1 
    UNION ALL 
    SELECT * FROM table2 
    UNION ALL 
    SELECT * FROM table3 
    UNION ALL 
    SELECT * FROM table4 
) t 
ORDER BY t.timestamp_col 
LIMIT first_rec, page_size; 

할 다음 일은 그 timestamp_col에 인덱스를 가지고해야하는 것입니다,하지만 난 당신에게 각 테이블에 대해 정기적으로 인덱스가 작동하는지 확실하지 않다, 그래서 :

이 시도 해당 쿼리에서 EXPLAIN PLAIN을 실행해야합니다.