您好,登錄后才能下訂單哦!
這篇文章主要介紹“分析SQL優化的limit分頁延遲關聯”,在日常操作中,相信很多人在分析SQL優化的limit分頁延遲關聯問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”分析SQL優化的limit分頁延遲關聯”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
MySQL分頁查詢最頭疼的問題是偏移量非常大,比如limit 10000,20,就要檢索出10020條記錄,值返回最后20條,前邊的10000行全部拋棄掉。對于檢索字段非常多的情況下,效率更為糟糕。
SELECT id, order_seq, product_id, user_id, artisan_id, order_price, real_pay, date_format( order_time, '%Y-%m-%d %H:%i:%s' ) order_time, user_address, STATUS, date_format( pay_time, '%Y-%m-%d %H:%i:%s' ) pay_time, user_contact, coupon_price, coupon_effect_price, order_over_time, product_price, product_trade_price, source_from, create_time, out_channel FROM us_order WHERE ( source_from != 20 OR source_from IS NULL ) AND out_channel = 0 ORDER BY id DESC LIMIT 1000000,10
例如這個SQL,耗時110s。我們需要檢索出1000010條記錄,然后取最后10條,包括近20個字段,對于IO的消耗是非常大的,與此同時,因為SQL執行時間較長,CPU時間占比也較高,在并發高的情況下,很可能出現CPU打滿。
對于這個SQL本身來說,偏移量1000000我們無法改變,那我們如何減少MySQL掃描的頁來提高查詢速度呢?
SELECT id, order_seq, product_id, user_id, artisan_id, order_price, real_pay, date_format( order_time, '%Y-%m-%d %H:%i:%s' ) order_time, user_address, STATUS, date_format( pay_time, '%Y-%m-%d %H:%i:%s' ) pay_time, user_contact, coupon_price, coupon_effect_price, order_over_time, product_price, product_trade_price, source_from, create_time, out_channel FROM us_order inner join (select id from us_order where ( source_from != 20 OR source_from IS NULL ) AND out_channel = 0 ORDER BY id DESC LIMIT 1000000,10) as aa using(id) WHERE ( source_from != 20 OR source_from IS NULL ) AND out_channel = 0
到此,關于“分析SQL優化的limit分頁延遲關聯”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。