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