接上文, 短彩信羣發平臺的一個特色是數據量大。按日均發送量50W條天天,每個月數據在1500W左右。 因此歷史庫採用分表策略, 每個月一張表。另外爲提升歷史表入庫速度,建有當天表一張,天天晚上將當天表數據拷貝到當月歷史表,並清空當天表。 歷史表與用戶表、任務表、業務表等多表關聯。 用戶要求跨月查詢,且速度要求快,經協商可查詢兩個月內數據。io
以上爲背景, 根據分表規則,最可能是查詢三張表。例如查詢8月1日到當天的記錄,須要查詢表t_xxx_history_201208,t_xxx_history_201209和當天表t_xxx_history。普通方法經過union直接查詢,每張表數據100W左右就須要1分鐘左右。nio
筆者採用了另一種方式來處理,
一、將查詢條件分解, 並分別到關聯表去查詢以獲得相應的id列表。
二、根據各關聯表id列表和其他查詢條件分別count查詢t_xxx_history_20120八、t_xxx_history_20120九、t_xxx_history。而後相加獲得總記錄數。這樣能夠計算出總頁數,及當前頁的記錄分佈在哪幾張表裏面。而後依次 從表中獲取數據組裝成list返回前臺顯示。 目前每張表數據在1500W左右,查詢顯示速度在5秒之內完成。方法