<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:56215|
      • 收錄網站:181186|

      IT精英團

      MySQL查詢語句的limit offset是如何實現的?

      MySQL查詢語句的limit offset是如何實現的?

      瀏覽次數:
      評論次數:
      編輯: 澤洋
      信息來源: ITPUB
      更新日期: 2022-04-28 21:03:24
      摘要

      在寫select語句的時候,使用limit,offset可能就像是我們吃飯喝水一樣自然了。剛開始工作的時候也經常聽前輩們教導:使用limit,offset,當offset變大的時候執

      • 正文開始
      • 相關閱讀
      • 推薦作品

      在編寫select語句時,使用limit、offset可能就像我們吃飯喝水一樣自然。剛開始工作的時候,經常聽前輩教導:在使用limit,offset的時候,offset越大執行效率會越來越低。

      相信在前人的言傳身教中,在自己的實戰中,都知道為什么會這樣。

      因為在select的執行過程中,存儲引擎返回的記錄經過服務器層的WHERE條件篩選后,會直接毫不留情地丟棄第一條符合條件的偏移記錄,直到第一條符合條件的偏移記錄發送到客戶端,發送完限制記錄后,查詢結束。

      雖然我知道它是什么,為什么,但我一直很好奇底層是怎么實現的,所以今天我們就來看看它的真面目。

      1.語法復習

      讓我們簡單回顧一下select語句中limit,offset的語法。MySQL支持三種形式:

      LIMIT limit:因為沒有指定offset,offset=0,表示讀取滿足WHERE條件的第1 ~ LIMIT條記錄。

      極限偏移,極限:這是我們經常使用的。

      極限極限偏移偏移量:這不常用。

      offset和limit的值不能為負。在源代碼中,這兩個屬性被定義為無符號整數,它們在解析階段受到限制。如果它們是負數,則直接報告語法錯誤。

      2.語法分析階段

      在讀取數據的過程中,第一個符合條件的偏移記錄將被直接忽略,不會發送到客戶端,限制記錄將從符合條件的偏移1記錄開始發送到客戶端。

      因此,服務器層實際上需要從存儲引擎中讀取偏移限制記錄,這也是在源代碼中實現的。在語法解析階段,驗證offset和limit都是大于等于0的整數后,offset limit的計算結果保存在一個名為select_limit_cnt的屬性中,offset也會保存在一個名為offset_limit_cnt的屬性中。

      3.數據發送階段

      在發送數據的階段,此時的記錄已經通過了WHERE條件的篩選,下一步就是確定這個記錄是否要發送給客戶端。

      第 1 步

      因為offset已經保存在offset_limit_cnt中,所以先判斷offset_limit_cnt是否大于0。如果大于0,則丟棄該記錄,不發送給客戶端,offset_limit_cnt減1;如果它等于0,則該記錄有資格被發送到客戶端,然后繼續執行步驟2。

      在丟棄記錄之前,還要做一件事:在一個名為send_records的屬性上加1,就是假裝這條記錄已經發出去了(為什么這么做?該屬性將在步驟2)中使用。

      Offset_limit_cnt保證不小于0,所以這一步只需要判斷是否大于等于0。

      第 2 步

      在這個階段,記錄有資格被發送到客戶端。至于送不送,要看客戶端要不要,客戶端要不要看select_limit_cnt。

      因此,在該步驟中,要判斷已發送記錄數(send_records)和待發送記錄數(select_limit_cnt)之間的關系。如果已發送記錄數大于或等于待發送記錄數,則查詢結束,否則,流程繼續到步驟3。

      第 3 步

      在這里,記錄正愉快地等待發送給客戶機。

      是的,你要快樂地等待,因為你要排隊。畢竟交通也是要花錢的。如果你不能得到一個記錄,就派一輛巴士。直到滿滿一車才走。這里的車指的是網絡緩沖區,以后會介紹。

      ,敬請期待。

      4. 最佳實踐

      既然在 offset變大之后,使用 limit, offset 效率越來越低,那應該怎么辦呢?對于實戰經驗豐富的小伙伴來說,這是相當簡單了,但是以防萬一剛看到本文的小伙伴是剛剛開始用 SQL 寫 Bug,所以還是要大概的寫一下的。

      以一個 SQL 為例:

      select * from t2
      where i1 > 90000000 limit 8888, 10

      為了取到 10 條記錄,要先找到 8888 條記錄,然后取到需要的 10 條,前面 8888 條記錄都白找了,太浪費了,可以這樣修改一下:

      select * from t2 
      where i1 > 90000000 and id > LAST_MAX_ID
      limit 10

      LAST_MAX_ID是上一次執行 SQL 時讀取到的主鍵 ID的最大值,如果是第一次執行語句,LAST_MAX_ID = 0。

      不過這種方案也有個問題,不支持跳著翻頁,只支持順序翻頁(就是每次都點下一頁的這種)。

      如果要支持跳著翻頁,怎么辦?

      只用 MySQL 這把錘子顯然有點不夠用了,還要再找一把錘子(Redis),可以把符合條件的記錄的主鍵 ID都讀取出來,存入到 Redis 的有序集合(zset)中,用 zset 相應的函數讀取到某一頁應該展示的數據對應的那些主鍵 ID,然后用這些主鍵 ID 去 MySQL 中查詢對應的數據,從而用兩把錘子間接的實現了分頁功能。

      當然,這個方案也是有適用場景的,比如,這個方案明顯就不適用于這些場景:符合條件的記錄非常非常多導致存主鍵 ID 到 Redis 要占用很大的內存、記錄更新頻繁導致存主鍵 ID 的緩存經常被清除。如果碰到更復雜的場景,就要結合業務具體情況具體分析了。

      以上文章來源于公眾號-一樹一溪 ,作者操盛春  
      談談復雜項目代碼的應用分層
      ? 上一篇 2022-04-27
      誤操作離線丟棄和恢復場景測試的業務影響——來自“血”的教訓
      下一篇 ? 2022-05-05
      • 胡迪核心知識點詳解(好文章合集)
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-3分鐘秒懂大數據,作者在IT中穿梭旅行在Flink實時流中,經常會通過FlinkCDC插件讀取Mysql數據,然后寫入Hudi中。所以在執行上述操作時,需要了解……
      • 前端面試必須解決網絡中的跨域問題
        0閱讀 0條評論 個贊
        什么是跨域瀏覽器有一個重要的安全策略,稱之為「同源策略」其中,源=協議+主機+端口源=協議+主機+端口源=協議+主機+端口,兩個源相同,稱之為同源,兩個源不同,稱之為跨源或跨域比如:源1源2是否同……
      • 如何在Bash腳本中使用強大的Linux測試命令
        0閱讀 0條評論 個贊
        Linuxtest命令是Shell內置命令,用來檢測某個條件是否成立。test通常和if語句一起使用,并且大部分if語句都依賴test??梢詫⒁粋€元素與另一個元素進行比較,但它更?!?/div>
      • 真正的建筑設計是什么樣子的?
        1閱讀 0條評論 個贊
        什么是架構和架構本質在軟件行業,對于什么是架構,都有很多的爭論,每個人都有自己的理解。此君說的架構和彼君理解的架構未必是一回事。因此我們在討論架構之前,我們先討論架構的概念定義,概念是人認識這個世界的……
      • 10分鐘了解云原生 值得收藏~
        0閱讀 0條評論 個贊
        文章轉載:奇妙的Linux世界我們已經進入云計算下半場,不再像上半場在糾結要不要上云,而是討論怎么上云?才能把云計算的價值發揮到淋漓盡致。如何把云計算與不同的業務場景深度結合?如何讓技術真正作用于企業……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 如何用10行bash shell腳本監控Linux?
        1閱讀 0條評論 個贊
        http://985.so/xbtd子沐愛掃地(譯)監控我們的環境對于服務器運維來說至關重要,尤其是在部署新的應用程序時。如今,公司每天都使用開源解決方案來監控系統資源。但是,當出于測試的目的來監控……
      • 談如何設計未來的倉庫建筑
        4閱讀 0條評論 個贊
        編輯:數據社全文共3758個字,建議10分鐘閱讀大家好,我是峰哥,夏天已經來了,小麥馬上要豐收了,今天分析一篇關于未來數倉架構發展方向的文章。Linked大佬JayKreps曾發表過一篇博客,簡單闡……
      • 關于數據中心最強科普 一個就給你完整了解!
        1閱讀 0條評論 個贊
        數據中心,英文縮寫叫IDC,也就是InternetDataCenter(互聯網數據中心)。之所以不太直接稱之為“DC”,主要是為了避免和直流電(DirectCurrent)混淆。而且,現在的數……
      • 高并發服務的幾點優化經驗
        1閱讀 0條評論 個贊
        前言:如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?①無法做離線緩存,所有的數據都是實時讀的②大量的請求會打到線上服務,對于服務的響應時間要……
      • 微服務架構下基于Prometheus構建綜合監控平臺的最佳實踐
        2閱讀 0條評論 個贊
        隨著Prometheus逐漸成為云原生時代的可觀測事實標準,那么今天為大家帶來在微服務架構下基于Prometheus構建一體化監控平臺的最佳實踐和一些相關的思考,內容主要包括以下幾個部分:微服……
      • 40幅最完整的計算機網絡思維導圖
        1閱讀 0條評論 個贊
        傳輸介質簡介以太網幀結構IP編址ICMP協議ARP協議傳輸層協議路由基礎靜態路由基礎距離矢量路由協議——RIP鏈路狀態協議——OSPFHDLC&PPP原理與應用幀中繼原理與配置PPPoENAT網絡地址……
      • 透徹理解數據資產、數據資源、數據管理、數據治理等概念的區別
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-大魚的數據人生,作者討厭的大魚先生數據成為生產要素后,各種跟數據相關的概念就出來了,其實很多概念沒有權威定義,大家各有各的理解,這導致了理解上的歧義。數據管理、數據治理、數據資源……
      • 一天一技能:協調與多流程的完美結合
        7閱讀 0條評論 個贊
        我們知道,協程本質上是單線程單進程,通過充分利用IO等待時間來實現高并發。在IO等待時間之外的代碼,還是串行運行的。因此,如果協程非常多,多少每個協程內部的串行代碼運行時間超過了IO請求的等待時間,那……
      • 說說春云的全鏈路灰度發布方案~
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-碼猿技術專欄,作者不才陳某大家好實際生產中如有需求變更,并不會直接更新線上服務,最通常的做法便是:切出線上的小部分流量進行體驗測試,經過測試后無問題則全面的上線。這樣做的好處也是……
      • 如何在Linux下擴展XFS根分區
        2閱讀 0條評論 個贊
        在某些情況下,/分區在Linux中磁盤空間不足。即使壓縮和刪除舊的日志文件也無濟于事,因此在這種情況下,我們別無選擇,只能擴展/文件系統。在本文中,我們將演示如何在Linux系統中擴展不……
      • 你見過的最全面的Python關鍵知識總結
        1閱讀 0條評論 個贊
        這是一份來自于SegmentFault上的開發者@二十一總結的Python重點。由于總結了太多的東西,所以篇幅有點長,這也是作者"縫縫補補"總結了好久的東西,強烈建議收藏再慢慢看~Py2……
      • Linux最常用的命令:解決95%以上的問題
        1閱讀 0條評論 個贊
        Linux是目前應用最廣泛的服務器操作系統,基于Unix,開源免費,由于系統的穩定性和安全性,市場占有率很高,幾乎成為程序代碼運行的最佳系統環境。linux不僅可以長時間的運行我們編寫的程序代碼,還可……
      • 一行Python代碼實現并行
        1閱讀 0條評論 個贊
        譯者:caspar譯文:http://985.so/amks原文:http://985.so/amk5Python在程序并行化方面多少有些聲名狼藉。撇開技術上的問題,例如線程的實現和GIL,我……
      • 阿帕奇建筑師遵循的30條設計原則
        0閱讀 0條評論 個贊
        作者介紹Srinath,科學家,軟件架構師。ApacheAxis2項目的聯合創始人,ApacheSoftware基金會的成員,WSO2流處理器(wso2.com/analytics)的聯席架構師?!?/div>
      • 數據倉庫實踐:總線矩陣體系結構的設計
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-云祁的數據江湖,作者云祁如何設計一套切實可行的數據倉庫呢?我們要明白,對于數據倉庫的設計是不能完全依賴于業務的需求,但往往又必須要服務于業務的價值。因此,在構建數據倉庫前,我們……
      • 內存數據庫如何利用內存?
        1閱讀 0條評論 個贊
        與以磁盤存儲為主的普通數據庫相比,內存數據庫的數據訪問速度可以高出幾個數量級,能大幅提高運算性能,更適合高并發、低延時的業務場景。不過,當前大部分內存數據庫仍然采用SQL模型,而SQL缺乏一些……
      • Python字符串深度摘要
        2閱讀 0條評論 個贊
        以下文章來源于公眾號-蘿卜大雜燴,作者周蘿卜今天我們來學習字符串數據類型相關知識,將討論如何聲明字符串數據類型,字符串數據類型與ASCII表的關系,字符串數據類型的屬性,以及一些重要的字符串方法和……
      • 10分鐘了解云原生 值得收藏~
        0閱讀 0條評論 個贊
        文章轉載:奇妙的Linux世界我們已經進入云計算下半場,不再像上半場在糾結要不要上云,而是討論怎么上云?才能把云計算的價值發揮到淋漓盡致。如何把云計算與不同的業務場景深度結合?如何讓技術真正作用于企業……
      • MySQL 5.7 和 8.0 幾處細節上的差異
        9閱讀 0條評論 個贊
        MySQL8.0相對于MySQL5.7,有很多新特性,比如:快速加列、原子DDL、不可見索引、額外端口、角色管理等。這一節內容,就不講這些新特性了,只來聊聊最近在工作學習過程中遇到的幾處細節……
      • Redis過期的數據會被立即刪除嗎?
        1閱讀 0條評論 個贊
        本文來源碼哥字節(ID:MageByte)?碼哥,當key達到過期時間,Redis就會馬上刪除么?先說結論:并不會立馬刪除。Redis有兩種刪除過期數據的策略:定期選取部分數據刪除;惰性刪除;……
      • 京東云首次公布JD.COM供應鏈金融科技平臺
        1閱讀 0條評論 個贊
        近日,京東云舉辦了產業融合新品發布會-金融科技專場,在線上發布了3款金融科技產品,具體包括:一是面向金融機構的數智化營銷增長方案;二是京東生物資產監管平臺和京東供應鏈金融科技平臺。目前,京東云已經與中國銀行、工商銀行、建設銀行、中信銀行、民生銀行、平安銀行等金融機構共建了全場景營銷生態,探索以數字化合作模式實現場景獲客和持續用戶經營,實現客戶增長?!?/div>
      • 區塊鏈概念股普遍下跌比特幣跌破3.9萬美元
        0閱讀 0條評論 個贊
        區塊鏈概念股普跌,Marathon Digital跌2.48%,Bit Digital跌超3.51%,Riot Blockchain跌2.45%、Coinbase近2%,嘉楠科技跌3.34%。比特幣失守39000美元/枚,現報38519.6美元,日內跌幅2.34%?!?/div>
      • 央行、銀監會公布首套房貸利率下限
        10閱讀 0條評論 個贊
        對于貸款購買普通自住房的居民家庭,首套住房商業性個人住房貸款利率下限調整為不低于相應期限貸款市場報價利率減20個基點?!?/div>
      • 我們開始上課吧 布局銀發市場 解決代際溝通是關鍵
        1閱讀 0條評論 個贊
        老年人也需要充沛豐滿的精神世界?!?/div>
      • 網商VS微眾:九個指標看透孰強孰弱
        1閱讀 0條評論 個贊
        沒有誰真正愿意做“傻子銀行”……
      • 隱瞞12多億關聯交易董事長成立公司搞助學貸款、公教及高管被罰千萬
        9閱讀 0條評論 個贊
        隱瞞12億多關聯交易額,董事長成立公司搞培訓貸,昔日大白馬、“公考第一股”中公教育監管處罰來了?!?/div>
      • 尹航消費金融2021年凈利潤4.51億元 同比增長89% 尹航財富管理的凈利潤為6.1億元
        1閱讀 0條評論 個贊
        4月15日,杭州銀行發布2021年年報披露了全資子公司杭銀理財和參股聯營公司杭銀消費金融的經營業績情況。年報顯示,2021全年,杭銀理財未經審計總資產21.15億元,凈資產17.40億元,報告期營業收入9.33億元,實現凈利潤6.11億元。杭銀消金未經審計總資產366.44億元,凈資產45.02億元,報告期營業收入27.82億元,實現凈利潤4.51億元。與2020年相比,杭銀消金凈利潤同比增長88.7%?!?/div>
      • 網站優化的哪些因素會影響網站跳出率?
        1閱讀 0條評論 個贊
        跳出率是衡量網站質量的一個重要指標,也是很多站長十分關心的問題,很多人都希望可以降低網站的跳出率,不過,要怎么做才能降低網站的跳出率呢?一起看下本文的介紹……
      • 銀監會:無證P2P等互金平臺全部清退 互聯網平臺金融服務整治總體進展順利
        3閱讀 0條評論 個贊
        深入推進P2P網貸專項整治工作,約5000家P2P網貸機構全部停止運營,無牌照互聯網資管機構、支付機構、股權眾籌平臺、網絡互助平臺全部清退。堅決防止資本在金融領域無序擴張,常態化開展銀行保險機構股權和關聯交易專項整治,重點打擊惡意掏空金融機構的違法股東。依法將互聯網平臺金融業務全面納入監管。目前,平臺企業整改總體上順利推進。過去5年,監管部門累計處罰銀行保險機構1.6萬家次,合計罰沒122億元?!?/div>
      • Tik Tok集團在京投資成立今日頭條新公司
        1閱讀 0條評論 個贊
        5月9日,北京今日頭條信息技術有限公司成立,法定代表人為羅立新,注冊資本100萬元人民幣,經營范圍包含:廣告設計、代理;廣告發布;廣告制作等。企查查股權穿透顯示,該公司由抖音集團(香港)有限公司間接全資控股?!?/div>
      • 李彥宏下臺討薪主管:百度回應稱是正常工商變更
        0閱讀 0條評論 個贊
        近日,百度旗下第三方支付機構北京度小滿支付科技有限公司發生多起管理層變更,法定代表人及董事(理事)、經理、監事等人均出現變更?!?/div>
      • 河南四家村鎮銀行取錢難嗎?銀監會回應:公安機關已立案調查
        0閱讀 0條評論 個贊
        針對近日媒體報道個別村鎮銀行取款難的問題,銀保監會有關部門負責人5月18日回應稱,四家村鎮銀行的股東——河南新財富集團通過內外勾結、利用第三方平臺以及資金掮客等吸收公眾資金,涉嫌違法犯罪,公安機關已立案調查?!?/div>
      • 消息稱百度昆侖尋求20億元新融資:估值將增至170億元
        5閱讀 0條評論 個贊
        據彭博報道,知情人士說,百度旗下芯片子公司百度昆侖正尋求在新一輪融資中融資人民幣20億元(合3.17億美元),目前風險投資家正從互聯網業務轉向受到半導體等核心技術等受青睞的行業?!?/div>
      • SEO優化 建設高權重網站的技巧
        0閱讀 0條評論 個贊
        對網站優化來說,提高網站權重是一個比較重大的事,那么如何打造高權重網站?本文就給大家帶來SEO優化之打造高權重網站的技巧,一起來看看吧……
      • 金美辛消費者2021年凈利潤6930萬元同比增長18%:針對違規被罰稱已整改
        1閱讀 0條評論 個贊
        近日,廈門金美信消費金融有限責任公司(下稱“金美信消金”)披露2021年年度報告顯示,截至報告期末,營業凈收入3.12億元,較上年的2.4億元同比增長30%;凈利潤6929.86萬元,較上年的5857.16萬元同比增長18.3%。截至年末,資產總計45.63億元,較上年末的31.74億元同比增長43.8%,負債總計39.2億元。值得注意的是,針對去年9月因違規遭罰290萬元一事,金美信消金回應稱,及時推進落實各項整改措施,并已整改到位?!?/div>
      • 消費金融采購熱 中郵 中信 中行 馬山 招聯等 引發競價潮
        1閱讀 0條評論 個贊
        從招標看各平臺的策略與方向?!?/div>
      • 騰訊披露第一季度金融科技營收數據
        1閱讀 0條評論 個贊
        騰訊控股(00700,HK)發布了2022年第一季度業績報告。財報顯示,2021年Q1騰訊營收1354.71億元,與上年同比基本持平;歸母凈利潤(Non-IFRS)255.45億元,同比下滑23%。這也是騰訊在繼2021年Q3凈利潤同比下滑2%、Q4凈利潤同比下滑25%后,連續第三個季度出現單季凈利潤負增長?!?/div>
      • 11萬保險業務員撐起IPO
        1閱讀 0條評論 個贊
        2540萬個為保險買單的人……
      • 尚誠消費金融董事長將由楊蓉接任:去年凈利潤在同業中排名靠后
        1閱讀 0條評論 個贊
        昨日,銀保監會上海監管局公布《上海尚誠消費金融股份有限公司關于楊嶸擔任公司董事長任職資格的請示》,根據相關規定,經審核,核準楊嶸上海尚誠消費金融股份有限公司(下稱“尚城消費金融”)董事長的任職資格?!?/div>
      • 科控股(Ke Holdings Inc .)超50億收購圣都家居裝飾:美國最新高管持股和免費業績曝光官司纏身
        1閱讀 0條評論 個贊
        貝殼公司實益擁有圣都家裝已發行和發行在外的100%股份,圣都成為其合并子公司。值得注意的是,近日,貝殼找房向美SEC提交了20-F年報,披露了其最新持股比例、關聯交易以及風險因素等諸多內容?!?/div>
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>