<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    五個常見的優化SQL的技巧!

    VSole2022-09-08 11:00:00

    編程人員一定不陌生SQL語句吧,在我們日常寫項目過程中,或多或少都會使用到SQL,SQL主要功能有增刪改查,其中最常見的就是查詢了,因此SQL語句的性能就變得至關重要,如何優化SQL呢?請看下文:

    一、分解SQL

    當我們遇到一個較復雜的SQL時,可以選擇將它拆分成多個簡單的SQL,這樣既能保證處理結果,SQL也更簡短了。

    在面對超級復雜SQL語句時,性能提升尤為明顯,推薦分解為小查詢來進行優化,不過在應用設計時,如果一個查詢能解決問題且不會產生性能問題,這是完全沒問題的。

    分解可以使緩存更高效,可以很方便地緩存單表查詢結果對應的結果,執行單個查詢也可以減少表鎖的競爭,在程序應用層做關聯,更容易對數據庫進行拆分,也更容易做到高性能和可擴展。

    二、查詢切分

    遇到結果集很大的查詢,我們可以采用“分而治之”的思想,即將大查詢切分為小查詢,每個查詢功能完全一樣,只是各自完成一小部分,每次只返回一小部分的查詢結果,類似于分頁查詢。

    查詢切分不管是對于SQL查詢本身,還是對于上層業務來說,都是很小的開銷。

    三、執行計劃

    使用EXPLAIN關鍵字,可以讓我們知道MYSQL是如何執行SQL語句的,可以幫助我們分析我們的查詢語句或是表結構的性能瓶頸,EXPLAIN的查詢結果還會告訴我們索引主鍵是如何被利用的,數據表示如何被搜索或排序的等等。

    四、遵守原則

    在我們平時寫SQL時,養成良好習慣就可以很大程度上避免一些SQL性能問題。盤點以下幾點:

    a. 永遠為每張表設置一個ID主鍵;

    b. 避免使用SELECT *;

    c. 為搜索字段建立索引;

    d. 在Join表時使用對應類型的列,并將其索引;

    e. 盡可能使用NOT NULL;

    五、使用查詢緩存

    當有很多相同查詢被執行多次時,這些結果往往會被放入一個緩存中,這樣后續的相同查詢就不用操作而直接訪問緩存結果了。

    MySQL查詢緩存保存查詢返回的完整結果。當查詢命中該緩存,MySQL會like返回結果,跳過了解析、優化和執行截斷。

    這是提高查詢性能最有效的方法之一,而且這是被MySQL引擎處理的,通常MySQL默認是不開啟查詢緩存的,需要手動開啟。

    sql優化優化
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    在開始介紹如何優化sql前,先附上mysql內部邏輯圖讓大家有所了解連接器:?優先在緩存中進行查詢,如果查到了則直接返回,如果緩存中查詢不到,在去數據庫中查詢。
    一、前言 在應用開發的早期,數據量少,開發人員開發功能時更重視功能上的實現,隨著生產數據的增長,很多SQL語句開始暴露出性能問題,對生產的影響也越來越大,有時可能這些有問題的SQL就是整個系統性能的瓶頸。 二、SQL優化一般步驟 1、通過慢查日志等定位那些執行效率較低的SQL語句 2、explain 分析SQL的執行計劃
    背景我負責的系統到2021年初完成了功能上的建設,開始進入到推廣階段。隨著推廣的逐步深入,收到了很多好評的同時也收到了很多對性能的吐槽。作為一個優秀的后端程序員,這個數據肯定是不能忍的,我們馬上就進入了漫長的接口優化之路。
    國產數據庫與Oracle在可觀測性方面的差距
    數據庫的可觀測性的學習榜樣是Oracle,我們根據Oracle官方發布的資料以及可觀測性接口就可以比較清晰的了解到數據庫的運行狀態,進行問題定位、性能分析的工作。目前國產數據庫都沒有提供如此豐富的可觀測性接口與工具,因此對于國產數據庫的運維來說,造成了很大的障礙。不知道今年的開發者大會上發布的openGauss商業版里,會不會看到USTORE成為默認存儲引擎的功能。
    在面對超級復雜SQL語句時,性能提升尤為明顯,推薦分解為小查詢來進行優化,不過在應用設計時,如果一個查詢能解決問題且不會產生性能問題,這是完全沒問題的。MySQL查詢緩存保存查詢返回的完整結果。當查詢命中該緩存,MySQL會like返回結果,跳過了解析、優化和執行截斷。這是提高查詢性能最有效的方法之一,而且這是被MySQL引擎處理的,通常MySQL默認是不開啟查詢緩存的,需要手動開啟。
    如果關閉了autocommit,所有的sql語句都在一個事務中,直到執行了commit或rollback,該事務結束,并且開啟了下一個事務。DML語句等都不會強制提交事務。因此與其說ACID是事務必須滿足的條件,不如說它們是衡量事務的四個維度。undo log屬于邏輯日志,它記錄的是sql執行相關的信息。當發生回滾時,InnoDB會根據undo log做相反的事情,對于每個insert,回滾做delete;對于每個delete,回滾做insert;對于update,回滾會執行一個相反的update,把數據改回去。
    存算一體SHARDING模式的分布式數據庫最為典型的是Oceanbase。因為大型分布式計算環境下實施緩沖區融合成本極高,因此每個TIDB節點只能有本地緩沖,不能有全局緩沖。每個SET是一組高可用組,由一主多備組成。數據按照SET進行SHARDING分區。最初此類架構的主從切換類似于MYSQL的主從切換,對前端應用的影響很大,如果業務高峰時出現主DN故障,那就是災難性的。
    代表兩個單引號的長度和一個單引號的長度不一致,表明可能存在注入。支持json格式,V1.9以上版本已支持json多層嵌套。支持cookie測試支持右鍵發送到插件掃描備注:右鍵發送一定需要有響應包,不然發不過去,這樣才能對比和原數據包的長度。表示正在發送相關payload,end!?表示掃描完成且結果可能存在注入。變更 監控Proxy模式 為被動模式,提升交互體驗感。算法:MD5,如果是post包,值變化也不會重新掃描,需要參數名變化才會再次掃描。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类