最近在做微信視頻裂變、紅包裂變、群裂變的項目。該項目中做一個裂變層級的數據呈現時,主要是監測系統中的裂變層級關系,即在那一層看到數據進行了很大的裂變,SQL總是查詢超時。
大概示意圖如下:
因為要計算層級關系,數據庫中有記錄兩者之間的關系。只能通過IN的方式,去查詢數據,數據量本身也不多,但是IN的條件從頂上向下走的過程中,數據會越來越少,第一級到第二級時的數據達到了5K條ID,而且這個ID是字符串類型,首先獲取頂級的所有用戶OPENID集合,然后將該集合組成IN的條件代入到二級數據查詢中,再獲取二級所有的OPENID集合,再將集合中的數據代入到三級數據中查詢,首先我會兩者的關系字段做了索引,但是數據還是沒辦法出來,還是超時的問題,后面采用臨時表的方式,但是我的框架里面對這個的支持不是很好,又改成了實體表,將原有的OPENID集合放到臨時實體表中,用完再刪除即可以,整個改造大概花了一上午的時候完成。
1、業務類中定義了一個索引值。做為臨時表的計數器。
2、建立實體表方法,返回當前創建的實體表的表名。
3、以前是傳入OPENID的集合,組成IN的條件進行查詢,改為表的關聯查詢。基本上不存在超時的問題。
4、臨時表的規則如下所示。回頭可刪除。目前功能是算是完成。