亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySql中深度分頁的問題處理

 更新時間:2024年05月07日 11:00:18   作者:天青色等煙雨z  
這篇文章主要介紹了MySql中深度分頁的問題處理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

什么是深度分頁?

MySql深度分頁的問題,就是比如我們需要所查詢出的表數(shù)據(jù)量較大,需要進(jìn)行查詢結(jié)果返回集的后面部分,所出現(xiàn)的性能問題。

比如說我們有一個一百萬數(shù)據(jù)量的表,我們分頁需要查詢99990,10,數(shù)據(jù)庫通常情況下會先掃描前99990條數(shù)據(jù), 再進(jìn)行分頁返回最后10條,這樣就會導(dǎo)致查詢接口性能變慢,隨著OFFSET值的增大,查詢性能會顯著下降。

這是因?yàn)镸ySQL需要掃描從第一條記錄到OFFSET指定的位置,然后返回LIMIT數(shù)量的結(jié)果,這在大數(shù)據(jù)集中會導(dǎo)致大量的磁盤I/O操作和較慢的查詢響應(yīng)時間。

解決方案

1. 子查詢過濾主鍵ID

因?yàn)镸ysql中主鍵ID數(shù)據(jù)聚集索引,所有的數(shù)據(jù)都存儲在該節(jié)點(diǎn)的葉子節(jié)點(diǎn)上,所以如果我們使用了ID過濾條件

MySQL就會跳過前面的索引,也就不會掃描前方的數(shù)據(jù),進(jìn)行一個高效的過濾查詢

其實(shí)這也就是利用InndeDB中主鍵索引的優(yōu)點(diǎn),但是這有一個前提的咱們的主鍵ID必須是自增ID

SELECT * FROM table_name
2WHERE id >= (SELECT id FROM table_name ORDER BY some_column LIMIT 100000, 1)
3ORDER BY some_column LIMIT 10;

2. 基于子查詢進(jìn)行優(yōu)化

SELECT a.* FROM table_name a inner join (
select
 id
from 
table_name
where name="**"
order by id 
limit 10000 10
) b on a.id=b.id

在InndeDB中,子查詢中name是索引的情況下是不需要回表的

當(dāng)基于我們需要范圍ID中能快速找出我們所需要對應(yīng)的數(shù)據(jù),深度分頁帶來的性能問題也能游刃而解

且這種方式是返回的具體的ID集合,不僅快而且數(shù)據(jù)量也是我們指定

3. 倒序分頁

如果數(shù)據(jù)是按時間戳或其他遞增字段排序的,可以考慮倒序查詢

即先找出最大的ID,然后逐步往前查,這在某些場景下可以提高效率

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論