記一次單表查詢,數據量3億+的操作錯誤

前言

近期新建了一張表用來存取客戶近30天的資產信息數據量高於3個億,建表時創建了分區,前臺查詢單個用戶數據時及其緩慢,之後讓etl加了索引,稍微好了一些。

問題

功能上線後,由於查詢併發較高,查詢緩慢,導致大量鏈接佔用出現項目卡頓。

處理

經過排查,發現分區只在數據跑批時起到了一定作用,加快數據的插入,對於查詢卻沒起到多大作用,因爲分區根據日期來分,前面講到是近30天的數據,這樣的話查詢要分30次,併發一高必然影響效率。索引 被etl加成了分區的,如此基本上沒起到什麼作用,因爲分區後的數據,每個分區的索引意義不大,在查詢30個分區的時候就已經是浪費時間了。最終取消了分區,增加了全局索引。取消分區只是在insert數據時緩慢,但對應sp只在夜間運行,消耗點時間沒什麼問題。

總結

表創建時加了分區以及索引。不料主鍵索引加在了分區上。上線後查詢較慢,數據連接較大導致項目卡頓。數據內容爲客戶近30日的資產信息,起初創建分區爲了新增數據方便。但真正查詢時影響效率。分區有範圍分區、哈希分區、列表分區、組合分區等。大數據情況下用分區表是好,但不是絕對的,要結合具體的應用場景,並且索引也非常關鍵,有無索引對查詢效率影響是天壤之別。
問題: 查詢資產時以天分區,查詢30次,每個分區中只取1條數據,影響查詢效率。
處理: 取消分區,增加全局索引。
全局索引與分區索引的區別:全局索引可以分區,也可以是不分區索引;如果有分區後創建全局索引,維護起來比較麻煩。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章