sql實(shí)現(xiàn)分頁查詢 為什么MySQL在數(shù)據(jù)庫較大的時(shí)候分頁查詢很慢,如何優(yōu)化?
為什么MySQL在數(shù)據(jù)庫較大的時(shí)候分頁查詢很慢,如何優(yōu)化?正如房東所說,分頁查詢?cè)谖覀兊膶?shí)際應(yīng)用中非常常見,也是問題最多的查詢場(chǎng)景。例如,對(duì)于下面的簡(jiǎn)單語句,通常的思考方式是在name、age、reg
為什么MySQL在數(shù)據(jù)庫較大的時(shí)候分頁查詢很慢,如何優(yōu)化?
正如房東所說,分頁查詢?cè)谖覀兊膶?shí)際應(yīng)用中非常常見,也是問題最多的查詢場(chǎng)景。例如,對(duì)于下面的簡(jiǎn)單語句,通常的思考方式是在name、age、register中u在time字段上創(chuàng)建一個(gè)復(fù)合索引。這樣,條件排序可以有效地利用索引,性能得到快速提高。
如上例所示,當(dāng)limit子句變?yōu)椤發(fā)imit 100000,50”時(shí),我們會(huì)發(fā)現(xiàn),如果只選擇了50條語句,為什么會(huì)變慢?
,所以我們會(huì)覺得很慢。
數(shù)據(jù)庫分頁怎樣實(shí)現(xiàn)?
分頁,前端和后端都可以實(shí)現(xiàn):
后端分頁:后端對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行分頁,前端調(diào)用接口獲取數(shù)據(jù),需要通過一個(gè)額外的頁數(shù)參數(shù)來指示要獲取哪一頁數(shù)據(jù),前端可以獲取數(shù)據(jù)進(jìn)行顯示。一般情況下,后端會(huì)返回當(dāng)前頁面數(shù)據(jù)之外的總頁數(shù)或總數(shù)據(jù)量,方便前端進(jìn)行跳頁導(dǎo)航。當(dāng)然,為了避免頻繁調(diào)用接口,它可以一次返回多頁數(shù)據(jù),這就需要前端和后端之間的通信;
前端分頁:前端分頁需要一次獲取所有數(shù)據(jù),緩存數(shù)據(jù),通常返回一個(gè)數(shù)據(jù)數(shù)組;然后通過JavaScript計(jì)算分頁,實(shí)現(xiàn)分頁跳轉(zhuǎn)和刷新顯示數(shù)據(jù)。
您需要注意的一點(diǎn)是如何在跳過頁面時(shí)更好地更新演示數(shù)據(jù)。如果使用react和Vue的MVVM框架,問題非常簡(jiǎn)單。但是如果不使用它,也可以直接使用jQuery datatable的插件。如果需求相對(duì)簡(jiǎn)單,而性能要求不高,那么也可以實(shí)現(xiàn)本機(jī)需求。
愛前端,愛分享。