请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

為何第一種優化後面的分頁會越來越差?

老師您好 關於第一種優化後面的分頁會越來越差 還有中間結果很大時效率會扁差這邊不是很懂 有具體一點的例子麼?非常感謝

正在回答

1回答

因为limit 的限制,如果limit 1000010 10 这样子查询,实际上mysql会查询出1000020条记录,并返回最后的10条,所以使用limit 分页越往后性能会越差。

1 回复 有任何疑惑可以回复我~
  • 提问者 pinkyTseng #1
    感謝老師
    回复 有任何疑惑可以回复我~ 2020-01-14 20:03:44
  • 提问者 pinkyTseng #2
    我知道分頁limit語法會慢的原因了  但是思考研究了好一陣子,透過第二種改進的優化會變更有效率的原因我還是不是很確定  是不是和以下2點有關?
    1.mysql語法執行順序有關 join和select執行會優先於limit
    2.select只要包含非主鍵的field就無法只在索引樹上操作 而要在帶有完整資料的(關聯表)上操作,因為索引樹比完整資料的表的樹小很多會大幅減少查询出查询出1000020条的io操作的時間,即使後來多了和符合條件虛擬表join的操作時間仍是快上很多
    
    
    順便補問一下 我上面第2點的說法是不是有些錯誤?是不是只有索引和主鍵會有tree 完整的資料只會存在作業系統的page內  可以透過索引tree的指標之類的找到?
    
    再請老師指點迷津 感謝
    回复 有任何疑惑可以回复我~ 2020-01-14 20:36:18
  • sqlercn 回复 提问者 pinkyTseng #3
    是的,基本上就是这样,利用主键索引先行查询出符合条件的数据的主键,然后再通过主键关联进行其它列的查询,这样查询性能就基本上固定了。另外,在Innodb中只有主键是可以定位到一行上所有数据的,二级索引叶节点指现的是主键。
    回复 有任何疑惑可以回复我~ 2020-01-15 10:40:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信