一文講透「篩選」功能背後的邏輯-索引
更新于:2025-04-11 01:35:45

在做篩選功能是一般都要載入幾秒,這種問題是如何產生的?這篇文章,作者為我們解答了這個問題,一起來看看。

在做篩選功能時,總會遇到回應慢的問題:為什麼點擊篩選之後,要 loading 幾秒?這類問題又不是功能設計的問題,作為產品的你不會代碼,摸不透背後的原理,無疑會抓狂,甚至會想著自己去學開發。

那麼下文會帶你認識篩選背後的邏輯,理解程式是怎麼從數據里篩選出來使用者想要的內容,以及提高篩選速度背後的原理,助你更好地和開發做朋友。

本文閱讀物件:產品經理(程式猿兄弟慎入)

1. 關於篩選功能

篩選功能是 SAAS 產品設計中常見的一種功能,從而提高查詢效率和準確性。篩選功能的實現通常依賴於 SQL 查詢語句和資料庫索引。

2. 影響篩選速度的因素

影響篩選速度的主要因素包括

(1)數據量的大小

(2)索引的使用

(3)查詢語句的複雜度

(4)資料庫的硬體配置

數據量越大,篩選所需的時間通常越長。索引的使用可以顯著提高篩選速度,尤其是對於大表的查詢。查詢語句的複雜度也會影響篩選速度,複雜的查詢語句可能需要更多的計算資源。

3. 為什麼要做索引

索引的工作原理類似於書籍的目錄,它提供指向存儲在表的指定列中的數據值的指標,然後根據指定的排序順序對這些指標排序。當執行查詢時,資料庫系統首先查詢索引,然後通過索引找到相關的數據,從而避免了掃描整個表,大大提高了查詢效率。

簡單理解,索引相當於提前對數據做了歸類(目錄),從而提高篩選查詢速度。而且不同於書籍的只有 1 個目錄,索引可以建多個。同時索引要建立正確才能有效提高篩選速度。

比如下方數據

前提:已經分別對區域和戶型建立索引(目錄)

目標:篩選“天河區 3 居室”的房子,並且按照房子錄入時間倒序排序分頁返回結果。

1、程式先根據索引“區域”快速找到“天河區”的數據。如果沒有索引,程式需要查詢全表,分別判斷沒一條數據是否是“天河區”,才能查找出來“天河區”房源。有了目前相當於提前做好了初步的查詢;

2、接著程式再根據索引“戶型”快速找到“ 3 居”的數據。讓後將這兩部分數據的交集取出來;

3、接著將 2 中的結果根據房源錄入時間倒序排序;

4、對排序結果取相應的分頁返回給用戶端。

索引可以組合多個字段進行創建,形成多列索引,上述例子可根據欄位“區域”和“戶型”創建 1 個索引,那麼程序查詢流程就變為如下,速度更快

1、程式先根據索引快速找到“天河區 3 居”的數據;

2、接著將 1 中的結果根據房源錄入時間倒序排序;

3、對排序結果取相應的分頁返回給用戶端。

上面只是對索引的簡單理解,資料庫可能會根據查詢條件選擇最優的查詢路徑,不只是“取交集”這種方式,如果想要了解這個內容,可請教研發人員

4. 索引對排序的影響

索引本身就是一種有序的數據結構,類似於書籍的目錄。當查詢需要排序時,如果排序欄位已經建立了索引,資料庫可以直接利用索引的有序性來返回排序后的結果,而不需要再進行額外的排序操作。這種方式可以顯著減少排序的時間和資源消耗。但這裡前提是使用者想要的排序規則和索引的排序規則是相同的。

5. 多大數據量要加索引,以及能帶來多大速度提升

根據文章《【實驗】MySQL 多少數據需要建立索引》,當數據量達到幾十萬條以後,索引的效果顯著,能明顯提升查詢速度。數據量越大,索引越發重要。當數據量達到千萬級別時,有無索引可導致性能相差千倍!因此,當數據量達到幾十萬條以上時,就應該考慮添加索引。

6. 索引怎麼建立,是否需要全部欄位都加索引

索引的建立需要根據具體的業務場景和查詢需求來決定,並非所有欄位都需要加索引。應選擇區分度高、查詢頻率高的欄位建立索引。

同時,索引的數量應適度,過多的索引會增加維護成本,影響數據更新操作的效率。相當於一本書籍,如果更新的書本內容,每次更新,目錄也需要同步更新。那麼如果索引(目錄)有多個,那麼每次更新數據,多個索引都需要同步更新。索引越多,維護成本越高。

7. 單表查詢 vs 多表查詢

如果從資料庫裡面一張數據表就能找到要的數據,那這種情況是最完美。但是 1 個複雜的系統,不可能用 1 張表存數據。比如 1 個電商系統,會存在如下多個表存儲資訊

如果需要查詢某個用戶的訂單記錄,結果需要返回:用戶暱稱、購買商品名稱、商品圖片、購買時間資訊。那這種情況就需要聯合使用者表、訂單表、商品表查詢,才能獲取想要的結果。

表關聯過多確實會影響資料庫查詢速度。在進行多表關聯查詢時,尤其是涉及大量數據的表,可能會導致查詢變慢。這是因為 MySQL 需要處理更多的表順序和複雜的查詢邏輯,從而增加了查詢的時間成本。

此外,當使用多個大表進行關聯查詢時,如果其中一張表的數據量非常大,那麼查詢效率會進一步降低。在這種情況下,可以通過優化索引設計來提高查詢效率。

8. 資料庫伺服器 cpu 滿了?是什麼意思?

CPU 是計算機的大腦,負責執行和處理各種任務和程序運行所需的所有指令和計算。CPU 使用率是指計算機的中央處理單元 ( CPU ) 消耗的處理時間量。

當你在電腦上運行程式或執行任務時,CPU 會處理並執行指令。CPU 使用率表明在任何給定時間有多少 CPU 容量被利用。它以百分比來衡量,100% 代表 CPU 處理能力的完全利用率。

當資料庫伺服器的 CPU 滿載時,可能會導致系統回應變慢或完全停止回應。在運維過程中,經常會遇到 MySQL 資料庫佔用 CPU 過高的情況,導致系統性能下降,甚至引發系統崩潰。

導致 CPU 滿載的原因可能有如下兩種:

1、自身服務導致

如果代碼出錯或業務發展訪問量增加所導致的,如果是代碼出錯的話,那麼就需要開發人員細心檢查優化代碼,緊急處理的話就是重啟服務或者是伺服器。如果是本身業務發展迅速導致的話,就建議及時升級配置,這種情況重啟服務基本上沒有什麼用,因為 CPU 會馬上跑滿。

2、中毒導致

如果是中毒導致的 CPU 爆滿,要立刻關閉進程,並使用殺毒工具進行病毒查殺。

題圖來自 Unsplash,基於 CC0 協定

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供資訊存儲空間服務

定製品類SKU的管理
定製品類SKU的管理
2025-03-26 11:05:05