一個緊急查詢的改進思路
今天下午有一個緊急需求,是輔助業務部門做一個緊急查詢,既然說緊急查詢,那麼肯定業務上需要加急處理,那麼很快就需要找到我們DBA來幫忙了。
需求的情況是,需要根據某一個使用者的標識(比如手機號)來定位對應使用者的id,可能同一個身份證號,可以註冊多個不同的id。
根據資料的情況,在系統中已經做了分庫分表。情況類似下面的形式。
比如說資料分成了12個使用者,每個使用者中都有一個account_delta的表,但是每個使用者中的資料完全不同,然後每3個使用者對一個物理資料庫,所以基本就是4個分庫,12個使用者。
然後存在一個公共庫的資料,這個部分也是一個概要資訊,就是使用者id的一個繫結關係,是放在了一個公共庫中,也就意味著這個表沒有做分庫分表。
現在正如紅色箭頭所示,傳入了對應的標識欄位,需要做緊急查詢,這就意味著需要在這4個分庫12個使用者中做一個全範圍查詢。
而且比較要命的提供的查詢條件是非索引欄位,那麼只能做全表,所以12個使用者一個一個來查,然後merge起來,人肉hadoop,實在是緊急處理不了。
這個時候可以參考的一個地方就是我們存在一個統計庫,這個統計庫中會定時同步這些賬號庫中的這部分資料,目前是採用增量重新整理的方式,所以在統計庫中的結構如下:
統計庫中目前是建立了12個物化檢視,和源庫中的12個基表是類似的。然後對於開發同事來說,就是一個簡單的account_delta,即一個簡單的view。
在大多數的場景使用中沒有碰到什麼明顯的效能問題。
所以這個問題就可以轉化為下面的形式
這個時候這些查詢就可以直接在統計庫中完成,而不用一個一個庫的去逐個嘗試,因為目前統計庫中的資料是一天一次增量重新整理,如果覺得資料不夠新,可以再做一次增量重新整理即可。
所以這些工作都可以在統計庫中完成,對於原本的這些分庫沒有任何的壓力和負載。而且速度也是大幅度提高。
然後查到對應的使用者id之後,需要再一次做一個關聯查詢,就是和公共庫中的data_bind關聯,得到最後需要的資料,這個data_bind在統計庫中沒有做同步,而且本身也沒有做分庫分表。
但是值得一提的是這個表中的使用者id有對應的索引,所以在公共庫中按照使用者id來查詢,效能也還是不錯的。
然後就這樣簡單分析了問題之後,在統計庫中查詢,因為是全表掃描,然後再開個並行,分分鐘就會得出結果,然後把返回的使用者id和公共庫的data_bind關聯起來,很快就能得到最後的結果。
所以看似簡單枯燥的日常問題處理,如果多一些改進思路,那麼自己也會輕鬆許多。
需求的情況是,需要根據某一個使用者的標識(比如手機號)來定位對應使用者的id,可能同一個身份證號,可以註冊多個不同的id。
根據資料的情況,在系統中已經做了分庫分表。情況類似下面的形式。
比如說資料分成了12個使用者,每個使用者中都有一個account_delta的表,但是每個使用者中的資料完全不同,然後每3個使用者對一個物理資料庫,所以基本就是4個分庫,12個使用者。
然後存在一個公共庫的資料,這個部分也是一個概要資訊,就是使用者id的一個繫結關係,是放在了一個公共庫中,也就意味著這個表沒有做分庫分表。
現在正如紅色箭頭所示,傳入了對應的標識欄位,需要做緊急查詢,這就意味著需要在這4個分庫12個使用者中做一個全範圍查詢。
而且比較要命的提供的查詢條件是非索引欄位,那麼只能做全表,所以12個使用者一個一個來查,然後merge起來,人肉hadoop,實在是緊急處理不了。
這個時候可以參考的一個地方就是我們存在一個統計庫,這個統計庫中會定時同步這些賬號庫中的這部分資料,目前是採用增量重新整理的方式,所以在統計庫中的結構如下:
統計庫中目前是建立了12個物化檢視,和源庫中的12個基表是類似的。然後對於開發同事來說,就是一個簡單的account_delta,即一個簡單的view。
在大多數的場景使用中沒有碰到什麼明顯的效能問題。
所以這個問題就可以轉化為下面的形式
這個時候這些查詢就可以直接在統計庫中完成,而不用一個一個庫的去逐個嘗試,因為目前統計庫中的資料是一天一次增量重新整理,如果覺得資料不夠新,可以再做一次增量重新整理即可。
所以這些工作都可以在統計庫中完成,對於原本的這些分庫沒有任何的壓力和負載。而且速度也是大幅度提高。
然後查到對應的使用者id之後,需要再一次做一個關聯查詢,就是和公共庫中的data_bind關聯,得到最後需要的資料,這個data_bind在統計庫中沒有做同步,而且本身也沒有做分庫分表。
但是值得一提的是這個表中的使用者id有對應的索引,所以在公共庫中按照使用者id來查詢,效能也還是不錯的。
然後就這樣簡單分析了問題之後,在統計庫中查詢,因為是全表掃描,然後再開個並行,分分鐘就會得出結果,然後把返回的使用者id和公共庫的data_bind關聯起來,很快就能得到最後的結果。
所以看似簡單枯燥的日常問題處理,如果多一些改進思路,那麼自己也會輕鬆許多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1870729/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個清理指令碼的改進思路指令碼
- 透過外部表改進一個繁瑣的大查詢
- 通過外部表改進一個繁瑣的大查詢
- jQuery查詢下一個緊鄰兄弟元素jQuery
- SSM整合_年輕人的第一個增刪改查_查詢SSM
- 改進 es 搜尋模組,像查詢資料庫一樣查詢 es,附完整小案例資料庫
- jsp裡如何對建立的臨時表進行查詢?急!JS
- 緊急求助!!!!RMI的實現
- 改進資料庫效能-SQL查詢優化資料庫SQL優化
- 客戶的一個緊急bug,我用了兩種方式進行 C# 反編譯修改原始碼C#編譯原始碼
- SQL慢查詢排查思路SQL
- 第一個hiberbate的改進BAT
- [MySQL] - 聯表查詢,查詢一個不在另一個表的記錄MySql
- SSH框架的多表查詢和增刪查改 (方法一)上框架
- 一個改進後的根據STATSPACK來查詢哪段時間內的事務量最大的指令碼指令碼
- 一個使用JDBC按Date查詢查詢的問題JDBC
- 一個oracle查詢引起的bugOracle
- 一個簡單的樹查詢
- [Mysql 查詢語句]——對查詢結果進一步的操作MySql
- 一個遞迴查詢遞迴
- 緊急招聘cobol工程師工程師
- MySQL查詢中分頁思路的優化BFMySql優化
- 談談SQL慢查詢的解決思路SQL
- 關於分頁查詢的優化思路優化
- iPhone緊急聯絡人設定教程 iPhone怎麼設定緊急聯絡人?iPhone
- win10系統如何緊急重新啟動_win10緊急重新啟動的使用教程Win10
- 一個MySQL多表查詢的問題MySql
- 一個查詢不走索引的例子索引
- 一個簡單的字串查詢程式字串
- 開源一個通用的查詢框架框架
- 查詢一個表的外來鍵
- 用WITH…AS改寫標量子查詢
- 關於sequence問題的緊急處理
- 記錄一次年前三天緊急上線一個小程式過程
- 緊急求助!jive安裝問題。
- 關於分頁查詢的最佳化思路
- 小米手機設定緊急聯絡人方法 小米能設定緊急聯絡人嗎?
- MySQL鎖表相關問題查詢思路MySql