Mysql LIMIT 使用過程的一個坑

需求:sql

tablename: testtable     測試

tablesize:150000000索引

      遍歷全部數據,更新字段A的值。it

作法1:table

        select id,A from testtable limit 0,1000;test

而後分頁查詢,如第二頁爲select

       select id,A from testtable limit 1000,1000;sql語句

問題很簡單,就使用了這種方法來進行遍歷,測試sql,沒有發現什麼問題,就運行了。遍歷

現象:運行一段時間後,sql執行就會很慢,每每一條數據須要執行2s左右,這顯然不可接受。分頁

分析:分析過程,explain select id,A from testtable limit 1000,1000; 查看過程,返現也使用了索引,可是掃描了2000行,丟棄了前1000行。這是分頁的執行過程,因此隨着表數據量愈來愈大,sql執行所掃描的數據就會愈來愈多,致使很慢。

解決方法:

        id通常是遞增的,執行完第一個sql語句後,獲取到最大的id,而後下次sql直接添加id的判斷條件,下次的自行sql語句就會變成 select id,A from testtable where id>1000  limit 1000.基於索引能夠快速定位到須要掃描到的id,而後再掃描1000條數據,這樣的話,就能解決sql語句執行時,掃描數據愈來愈多的問題。

相關文章
相關標籤/搜索