2015-01-21 31 views
-3

我在MySQL中有10個表,具有相同的列數,例如Id,Name,Timestamp。每個表格包含大約100萬條記錄。我必須將所有表格的合併數據顯示在一個地方。獲得按時間戳排序的分頁數據的最佳方式是什麼?例如,如果我必須顯示第4頁和頁面大小爲25,那麼我應該得到第76到第100條記錄,按照時間戳排序,就好像它們在單個表中一樣。MySql,分頁

我寫它(第4頁):

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 

這對小頁面大小正常工作(高達100),但對於> 20非常緩慢。如何改進?還有另一種方法可以做到嗎?

在此先感謝!

+0

使用ElasticSearch: - } – Ashalynd 2015-01-21 12:00:29

+0

只是我的看法,但你不應該浪費時間優化分頁超過10頁 - 目的是用戶友好的過濾,而不是。向我展示一個用戶,每個用戶將參與100個項目/行的10頁。 – Filburt 2015-01-21 12:03:30

回答

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