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

2021-10-17 21:43:57 字數 1192 閱讀 5990

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

分庫分表的排序

分庫分表的排序

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條記錄的話場景

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到應用端,然後在程式端很容易做彙總,排序分頁操作

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

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

MySQL範圍分表分庫 mysql 分表分庫策略

唯一id的生成 下面列舉幾種常見的唯一id生成方案,需要滿足兩大核心需求 1.全域性唯一 2趨勢有序 1.用資料庫的auto increment 自增id 來生成,每次通過寫入資料庫一條記錄,利用資料庫id自增的特性獲取唯一,有序的id。優點 使用資料庫原有的功能,相對簡單 能夠保證唯一 能夠保證遞...

mysql 分庫分表實戰 MySQL分庫分表實戰

為什麼要分庫分表 在大型 中,當使用者量以及使用者產生的業務資料量達到單庫單錶效能極限時,為了支撐業務可持續發展,對於重要的核心業務必然要進行分庫分表來儲存業務資料。對於非核心業務產生的大量資料,例如爬蟲爬取的資訊,論壇產生的資料等,可以考慮把資料儲存在像mongodb這樣的nosql儲存裡面,這些...