MySql中深度分頁的問題處理
什么是深度分頁?
MySql深度分頁的問題,就是比如我們需要所查詢出的表數(shù)據量較大,需要進行查詢結果返回集的后面部分,所出現(xiàn)的性能問題。
比如說我們有一個一百萬數(shù)據量的表,我們分頁需要查詢99990,10,數(shù)據庫通常情況下會先掃描前99990條數(shù)據, 再進行分頁返回最后10條,這樣就會導致查詢接口性能變慢,隨著OFFSET值的增大,查詢性能會顯著下降。
這是因為MySQL需要掃描從第一條記錄到OFFSET指定的位置,然后返回LIMIT數(shù)量的結果,這在大數(shù)據集中會導致大量的磁盤I/O操作和較慢的查詢響應時間。
解決方案
1. 子查詢過濾主鍵ID
因為Mysql中主鍵ID數(shù)據聚集索引,所有的數(shù)據都存儲在該節(jié)點的葉子節(jié)點上,所以如果我們使用了ID過濾條件
MySQL就會跳過前面的索引,也就不會掃描前方的數(shù)據,進行一個高效的過濾查詢
其實這也就是利用InndeDB中主鍵索引的優(yōu)點,但是這有一個前提的咱們的主鍵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. 基于子查詢進行優(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是索引的情況下是不需要回表的
當基于我們需要范圍ID中能快速找出我們所需要對應的數(shù)據,深度分頁帶來的性能問題也能游刃而解
且這種方式是返回的具體的ID集合,不僅快而且數(shù)據量也是我們指定
3. 倒序分頁
如果數(shù)據是按時間戳或其他遞增字段排序的,可以考慮倒序查詢
即先找出最大的ID,然后逐步往前查,這在某些場景下可以提高效率
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
淺談MySQL安裝starting the server失敗的解決辦法
如果電腦是不是第一次安裝MySQL,一般會出現(xiàn)報錯情況,starting the server失敗,通常是因為上次安裝的該軟件未清除干凈,本文就詳細的介紹一下解決方法,感興趣的可以了解一下2021-09-09
Mysql徹底解決中文亂碼問題的方案(Illegal mix of collations for operation)
mysql數(shù)據庫和中文支持很不友好,經常見到“Illegal mix of collations for operation”錯誤,該如何解決呢?下面小編給大家?guī)砹薽ysql數(shù)據庫中涉及到哪些字符集及徹底解決中文亂碼的解決方案,非常不錯,一起看看吧2016-08-08

