亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么MySQL更高的限制抵消了查詢慢下來?

為什么MySQL更高的限制抵消了查詢慢下來?

一只斗牛犬 2019-07-02 15:58:49
為什么MySQL更高的限制抵消了查詢慢下來?簡而言之:一個記錄超過1600萬條(2GB)的表。SELECT的限制偏移量越高,使用ORDERBY*PRIMARY_KEY*查詢的速度就越慢所以SELECT * FROM large ORDER BY `id`  LIMIT 0, 30比SELECT * FROM large ORDER BY `id` LIMIT 10000, 30只訂購了30條記錄和同樣的方式。所以這不是訂單的開銷?,F在,當獲取最新的30行時,大約需要180秒。如何優化這個簡單的查詢?
查看完整描述

3 回答

?
慕后森

TA貢獻1802條經驗 獲得超5個贊

我自己也有同樣的問題。考慮到您希望收集大量的此數據,而不是特定的30集,您可能會運行一個循環,并將偏移量增加30。

所以你可以做的是:

  1. 保存一組數據(30)的最后一個id(例如lastId=530)
  2. 添加條件

    WHERE id > lastId limit 0,30

所以你總是可以有一個零偏移。你會驚訝于性能的提高。


查看完整回答
反對 回復 2019-07-02
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

MySQL不能直接轉到第10000條記錄(或者你建議的80萬字節),因為它不能假設它是那樣打包/排序的(或者它有1到10000的連續值)。雖然實際上可能是這樣,但MySQL不能假設沒有漏洞/空白/刪除ID。

因此,正如bobs所指出的,mysql將需要獲取10000行(或遍歷索引的第10000個條目)。id)在找到30點要返回之前。

編輯*說明我的觀點

注意,盡管

SELECT * FROM large ORDER BY id LIMIT 10000, 30

會是慢(呃),

SELECT * FROM large WHERE id >  10000 ORDER BY id LIMIT 30

會是快(呃),并將返回相同的結果,前提是不缺少ids(即差距)。


查看完整回答
反對 回復 2019-07-02
  • 3 回答
  • 0 關注
  • 507 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號