作者 主題: 必須查詢多個table且須跨資料庫,如何實現分頁?  (閱讀 3699 次)

0 會員 與 1 訪客 正在閱讀本文。

enrouge

  • 懷疑的國中生
  • **
  • 文章數: 77
    • 檢視個人資料
各位大大

以前作分頁都使用sql語法 limit Num,Rows 來使用
現在因為一個table筆數過大,所以拆成多個table,
且放於多個database
table的結構都是一樣的
有用union作過,只要改sql語法,但在資料過多時,查詢速度有點慢
這種情形怎麼作會比較好呢?
謝謝

Nansen

  • 活潑的大學生
  • ***
  • 文章數: 212
    • 檢視個人資料
跨資料庫只會更慢,先找出慢的主因。
ex:資料多如果IO速度快也不會慢,IO速度快如果Query寫的不好也會慢,Query有問題其他都好也會慢
小弟在Lab用過32G記憶體的機器跑MSSQL 資料直接放在SSD上,兩億多筆Group by 排序結果10秒內能跑完。
如果資料沒有即時的需求,用一個中介Table將資料先作一些事前處理如加總/分群,最後的統計分析直接拿這些資料再加工,能加快不少速度
但是這樣會浪費掉不少磁碟空間,每一種需求可能要求的前處理不一樣,前處理也不是即時的而是透過排程背景執行

treble

  • 活潑的大學生
  • ***
  • 文章數: 215
    • 檢視個人資料
    • 牛的大腦
小弟在Lab用過32G記憶體的機器跑MSSQL 資料直接放在SSD上,兩億多筆Group by 排序結果10秒內能跑完。

我正準備測試說,不過已經有大大證實了,剛好可以省下一個工
[牛的大腦  http://systw.net ] 用來放一些筆記資料
[單字我朋友  http://systw.net/word ] 練英文用的
2分鐘檢測你的單字能力 http://systw.net/word/q.php

Nansen

  • 活潑的大學生
  • ***
  • 文章數: 212
    • 檢視個人資料
不過要注意的是建立索引,我下的查詢沒有產生全表掃描的情況
都使用索引鍵,才能壓在這個速度

參考資料
http://bigone2000.pixnet.net/blog/post/56194164-%E4%B8%80%E4%BA%9B%E5%B8%B8%E8%A6%8B%E7%9A%84sql%E6%95%88%E8%83%BD%E5%95%8F%E9%A1%8C

http://www.programmer-club.com.tw/showSameTitleN/sqlserver2005/254.html

enrouge

  • 懷疑的國中生
  • **
  • 文章數: 77
    • 檢視個人資料
謝謝各位回答
因為是要放在embedded系統裏,一個table 1.5萬筆資料
單一table查詢:大約15115 筆, 查詢需時 0.0300 秒
語法select SN from `tbname1` limit 0,30

union 查詢:大約30228 筆, 查詢需時 7.4300 秒
sql語法: select SN from `tbname1` union all select SN from `tbname2` LIMIT 0 , 30

SN是primary key
是因為使用union的關係嗎?有甚麼方法可以增加查詢速度嗎?

因為當初設計是只有一個table,但資料量到10萬筆以上時,embedded系統查詢會變的慢,所以才拆成多個table.

謝謝