mysql - 千萬數(shù)據(jù) 分頁,當(dāng)偏移量 原來越大時(shí),怎么優(yōu)化速度
問題描述
以mysql為例,一般數(shù)據(jù)量比較大的時(shí)候,分頁的話,偏移量約大,查詢效率越低,
比如有某個(gè)帖子有200萬評(píng)論,每頁顯示10條,就有20萬頁, 當(dāng)取20萬頁,數(shù)據(jù)該怎么處理呢,有什么好的方法可以解決這種 需求呢,
實(shí)例: 網(wǎng)易音樂,單個(gè)歌曲最大評(píng)論數(shù)有140多萬,分頁速度處理的很好的,
問題解答
回答1:第一我相信網(wǎng)易音樂讀取數(shù)據(jù)的方式絕對(duì)是使用nosql,去讀取數(shù)據(jù)。當(dāng)然假如你的數(shù)據(jù)表訪問頻率不高的話,還是可以直接讀取數(shù)據(jù)庫,當(dāng)然mysql innodb庫有個(gè)坑爹的弱點(diǎn),就是你查詢頁數(shù)越大,所以的效果就越小。所以一般我們是通過id去提高查詢的效果舊的查詢用法 limit 100000,10 建議查詢用法 where id > 100000 limit 10。這樣可以保證到索引的使用。當(dāng)然你可以使用分錶的形式,降低單表數(shù)據(jù),從而提高查詢效率
回答2:如果用redis的化應(yīng)該是將id都存在list中,然后利用redis獲得list的某個(gè)片段,然后拿片段里的ID到mysql去查詢結(jié)果。
當(dāng)然如果你要加上排序的話就沒轍了。
