B端|一文講透「篩選」功能背后的邏輯-索引
在做篩選功能是一般都要加載幾秒,這種問題是如何產(chǎn)生的?這篇文章,作者為我們解答了這個問題,一起來看看。
在做篩選功能時,總會遇到響應(yīng)慢的問題:為什么點擊篩選之后,要loading幾秒?這類問題又不是功能設(shè)計的問題,作為產(chǎn)品的你不會代碼,摸不透背后的原理,無疑會抓狂,甚至?xí)胫约喝W(xué)開發(fā)。
那么下文會帶你認識篩選背后的邏輯,理解程序是怎么從數(shù)據(jù)里篩選出來用戶想要的內(nèi)容,以及提高篩選速度背后的原理,助你更好地和開發(fā)做朋友。
本文閱讀對象:產(chǎn)品經(jīng)理(程序猿兄弟慎入)
1. 關(guān)于篩選功能
篩選功能是SAAS產(chǎn)品設(shè)計中常見的一種功能,從而提高查詢效率和準確性。篩選功能的實現(xiàn)通常依賴于SQL查詢語句和數(shù)據(jù)庫索引。
2. 影響篩選速度的因素
影響篩選速度的主要因素包括
(1)數(shù)據(jù)量的大小
(2)索引的使用
(3)查詢語句的復(fù)雜度
(4)數(shù)據(jù)庫的硬件配置
數(shù)據(jù)量越大,篩選所需的時間通常越長。索引的使用可以顯著提高篩選速度,尤其是對于大表的查詢。查詢語句的復(fù)雜度也會影響篩選速度,復(fù)雜的查詢語句可能需要更多的計算資源。
3. 為什么要做索引
索引的工作原理類似于書籍的目錄,它提供指向存儲在表的指定列中的數(shù)據(jù)值的指針,然后根據(jù)指定的排序順序?qū)@些指針排序。當執(zhí)行查詢時,數(shù)據(jù)庫系統(tǒng)首先查詢索引,然后通過索引找到相關(guān)的數(shù)據(jù),從而避免了掃描整個表,大大提高了查詢效率。
簡單理解,索引相當于提前對數(shù)據(jù)做了歸類(目錄),從而提高篩選查詢速度。而且不同于書籍的只有1個目錄,索引可以建多個。同時索引要建立正確才能有效提高篩選速度。
比如下方數(shù)據(jù)
前提條件:已經(jīng)分別對區(qū)域和戶型建立索引(目錄)
目標:篩選“天河區(qū)3居室”的房子,并且按照房子錄入時間倒序排序分頁返回結(jié)果。
1、程序先根據(jù)索引“區(qū)域”快速找到“天河區(qū)”的數(shù)據(jù)。如果沒有索引,程序需要查詢?nèi)?,分別判斷沒一條數(shù)據(jù)是否是“天河區(qū)”,才能查找出來“天河區(qū)”房源。有了目前相當于提前做好了初步的查詢;
2、接著程序再根據(jù)索引“戶型”快速找到“3居”的數(shù)據(jù)。讓后將這兩部分數(shù)據(jù)的交集取出來;
3、接著將2中的結(jié)果根據(jù)房源錄入時間倒序排序;
4、對排序結(jié)果取相應(yīng)的分頁返回給客戶端。
索引可以組合多個字段進行創(chuàng)建,形成多列索引,上述例子可根據(jù)字段“區(qū)域”和“戶型”創(chuàng)建1個索引,那么程序查詢流程就變?yōu)槿缦?,速度更?/p>
1、程序先根據(jù)索引快速找到“天河區(qū)3居”的數(shù)據(jù);
2、接著將1中的結(jié)果根據(jù)房源錄入時間倒序排序;
3、對排序結(jié)果取相應(yīng)的分頁返回給客戶端。
上面只是對索引的簡單理解,數(shù)據(jù)庫可能會根據(jù)查詢條件選擇最優(yōu)的查詢路徑,不只是“取交集”這種方式,如果想要了解這個內(nèi)容,可請教研發(fā)人員
4. 索引對排序的影響
索引本身就是一種有序的數(shù)據(jù)結(jié)構(gòu),類似于書籍的目錄。當查詢需要排序時,如果排序字段已經(jīng)建立了索引,數(shù)據(jù)庫可以直接利用索引的有序性來返回排序后的結(jié)果,而不需要再進行額外的排序操作。這種方式可以顯著減少排序的時間和資源消耗。但這里前提是用戶想要的排序規(guī)則和索引的排序規(guī)則是相同的。
5. 多大數(shù)據(jù)量要加索引,以及能帶來多大速度提升
根據(jù)文章《【實驗】MySQL多少數(shù)據(jù)需要建立索引》,當數(shù)據(jù)量達到幾十萬條以后,索引的效果顯著,能明顯提升查詢速度。數(shù)據(jù)量越大,索引越發(fā)重要。當數(shù)據(jù)量達到千萬級別時,有無索引可導(dǎo)致性能相差千倍!因此,當數(shù)據(jù)量達到幾十萬條以上時,就應(yīng)該考慮添加索引。
6. 索引怎么建立,是否需要全部字段都加索引
索引的建立需要根據(jù)具體的業(yè)務(wù)場景和查詢需求來決定,并非所有字段都需要加索引。應(yīng)選擇區(qū)分度高、查詢頻率高的字段建立索引。
同時,索引的數(shù)量應(yīng)適度,過多的索引會增加維護成本,影響數(shù)據(jù)更新操作的效率。相當于一本書籍,如果更新的書本內(nèi)容,每次更新,目錄也需要同步更新。那么如果索引(目錄)有多個,那么每次更新數(shù)據(jù),多個索引都需要同步更新。索引越多,維護成本越高。
7. 單表查詢vs多表查詢
如果從數(shù)據(jù)庫里面一張數(shù)據(jù)表就能找到要的數(shù)據(jù),那這種情況是最完美。但是1個復(fù)雜的系統(tǒng),不可能用1張表存數(shù)據(jù)。比如1個電商系統(tǒng),會存在如下多個表存儲信息
如果需要查詢某個用戶的訂單記錄,結(jié)果需要返回:用戶昵稱、購買商品名稱、商品圖片、購買時間信息。那這種情況就需要聯(lián)合用戶表、訂單表、商品表查詢,才能獲取想要的結(jié)果。
表關(guān)聯(lián)過多確實會影響數(shù)據(jù)庫查詢速度。在進行多表關(guān)聯(lián)查詢時,尤其是涉及大量數(shù)據(jù)的表,可能會導(dǎo)致查詢變慢。這是因為MySQL需要處理更多的表順序和復(fù)雜的查詢邏輯,從而增加了查詢的時間成本。
此外,當使用多個大表進行關(guān)聯(lián)查詢時,如果其中一張表的數(shù)據(jù)量非常大,那么查詢效率會進一步降低。在這種情況下,可以通過優(yōu)化索引設(shè)計來提高查詢效率。
8. 數(shù)據(jù)庫服務(wù)器cpu滿了?是什么意思?
CPU 是計算機的大腦,負責(zé)執(zhí)行和處理各種任務(wù)和程序運行所需的所有指令和計算。CPU 使用率是指計算機的中央處理單元 (CPU) 消耗的處理時間量。
當你在計算機上運行程序或執(zhí)行任務(wù)時,CPU 會處理并執(zhí)行指令。CPU 使用率表明在任何給定時間有多少 CPU 容量被利用。它以百分比來衡量,100% 代表 CPU 處理能力的完全利用率。
當數(shù)據(jù)庫服務(wù)器的CPU滿載時,可能會導(dǎo)致系統(tǒng)響應(yīng)變慢或完全停止響應(yīng)。在運維過程中,經(jīng)常會遇到MySQL數(shù)據(jù)庫占用CPU過高的情況,導(dǎo)致系統(tǒng)性能下降,甚至引發(fā)系統(tǒng)崩潰。
導(dǎo)致CPU滿載的原因可能有如下兩種:
1、自身服務(wù)導(dǎo)致
如果代碼出錯或業(yè)務(wù)發(fā)展訪問量增加所導(dǎo)致的,如果是代碼出錯的話,那么就需要開發(fā)人員細心檢查優(yōu)化代碼,緊急處理的話就是重啟服務(wù)或者是服務(wù)器。如果是本身業(yè)務(wù)發(fā)展迅速導(dǎo)致的話,就建議及時升級配置,這種情況重啟服務(wù)基本上沒有什么用,因為CPU會馬上跑滿。
2、中毒導(dǎo)致
如果是中毒導(dǎo)致的CPU爆滿,要立刻關(guān)閉進程,并使用殺毒工具進行病毒查殺。
本文由 @口述產(chǎn)品 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)
索引的數(shù)量應(yīng)適度,過多的索引會增加維護成本,影響數(shù)據(jù)更新操作的效率。相當于一本書籍,如果更新的書本內(nèi)容,每次更新,目錄也需要同步更新。那么如果索引(目錄)有多個,那么每次更新數(shù)據(jù),多個索引都需要同步更新。索引越多,維護成本越高。