分庫分表的排序

2022-04-09 12:34:36 字數 1056 閱讀 6938

分庫分表的排序

分庫分表的排序

1. 對於單庫,冗餘乙個彙總所有資料表,用於全部資料的排序,但是當資料量大,彙總表將會成為瓶頸。這不是乙個很好的方案

2. 無論單庫還是多個分庫,都由程式讀取需要資料並作排序。

排序的幾種方式:

大都是按時間排序的,如果在客戶端可以直接判斷在哪個分表最好,可以直接讀取指定分表並作排序

例如:彙總表td_test_all;而分表是按companyid分表的

原始sql:

select * from td_test_all

where  companyid =  15997 

order by productid desc limit 0,20

程式端完全可以通過companyid判斷在哪個分表讀取資料,改為

select * from td_test7

where  companyid =  15997 

order by productid desc limit 0,20

這樣資料的排序還是通過資料實現的。

如果where條件裡沒有分割槽字段的話,如何定位到具體分割槽呢?可以在設計階段,在常用字段上埋下分割槽規則的種子, 比如在td_test7.groupid欄位設計由int+7(7表示在分表td_test7裡)

如果資料必須從多個分表取資料的話:

對於取top n條記錄的話場景

程式分表讀取每個分表的前n條記錄(理想的認為資料都**乙個分表,從而減小結果集),如分割槽td_test0所示:

select *

from td_test0

where createtime> str_to_date('2013-04-28 15:34:02','%y-%m-%d %h:%i:%s')

order by createtime desc

limit 0,5

然後程式讀取這些結果集,在應用端彙總排序取top n記錄

對於需要分頁的話場景

這個就只能把每個分表、滿足條件的的所有記錄都load到應用端,然後在程式端很容易做彙總,排序分頁操作

------end----

分庫分表的排序

author skate time 2013 05 20 分庫分表的排序 1.對於單庫,冗餘乙個彙總所有資料表,用於全部資料的排序,但是當資料量大,彙總表將會成為瓶頸。這不是乙個很好的方案 2.無論單庫還是多個分庫,都由程式讀取需要資料並作排序。排序的幾種方式 大都是按時間排序的,如果在客戶端可以直...

mysql 分表後如何排序 分庫分表的排序

分庫分表的排序 分庫分表的排序 1.對於單庫,冗餘乙個彙總所有資料表,用於全部資料的排序,但是當資料量大,彙總表將會成為瓶頸。這不是乙個很好的方案 2.無論單庫還是多個分庫,都由程式讀取需要資料並作排序。排序的幾種方式 大都是按時間排序的,如 分庫分表的排序 分庫分表的排序 1.對於單庫,冗餘乙個彙...

mysql分表分庫實現 MySql分表分庫思路

一.資料庫瓶頸 1.1io瓶頸 第一種 磁碟讀io瓶頸,熱點資料太多,資料庫快取放不下,每次查詢時會產生大量的io 分庫和垂直分表 第二種 網路io瓶頸,請求的資料太多,網路頻寬不夠 分庫 1.2cpu瓶頸 第一種 sql問題,如sql中包含join,group by,order by,非索引字段條...