Mysql查詢優化

2021-08-16 08:55:51 字數 2725 閱讀 3143

主要介紹慢查詢日誌、sql的解析預處理及生成執行計畫、查詢各個階段所消耗的時間等

一 如何獲取有效能問題的sql

通過使用者反饋獲取儲存效能的sql

通過慢查詢日誌獲取儲存效能問題的sql

實時獲取存在效能問題的sql

二 慢查詢日誌介紹

使用慢查詢日誌獲取有效能的sql

show_query_log 啟動停止記錄慢查日誌

show_query_log_file 指定慢查日誌的儲存路徑及檔案

long_query_time 指定記錄慢查日誌sql執行時間的閥值

long_queries_not_using_indexes 是否記錄未使用索引的sql

慢查詢日誌中記錄的內容

常用的慢查日誌分析工具(mysqldumpslow)

-t(top) 指定取前幾條作為結果輸出

三 如何實時獲取有效能問題的sql

sql的解析預處理及生成執行計畫

mysql伺服器處理查詢請求的整個過程

1 客戶端傳送sql請求給伺服器

2 伺服器檢查是否可以在查詢快取中命中該sql

3 伺服器端進行sql解析、預處理、再由優化器生成對應的執行計畫

4 根據執行計畫,呼叫儲存引擎api來查詢資料

5 將結果返回給客戶端

四 查詢快取對sql效能的影響

查詢快取的設定

query_cache_type:設定查詢快取是否可用

query_cache_size:設定查詢快取的記憶體大小

query_cache_limit:設定查詢快取可用儲存的最大值

query_cache_wlock_invalidate 設定資料表被鎖後是否返回快取中的資料

query_cache_min_res_unit:設定查詢快取分配的記憶體塊的最小單位

五 將sql語句轉化為乙個執行計畫

mysql依照這個執行計畫和儲存引擎進行互動,這個階段包括了多個子過程

包括檢查語法是否使用了正確的關鍵字

關鍵字的順序是否正確等

預處理階段是根據mysql規則進一步解析樹是否合法

檢查查詢中所涉及的表和資料列是否存在及名字或別名是否存在歧義

語法檢查通過了,查詢優化器就可以生成查詢計畫了

六 造成mysql生成錯誤的執行計畫的原因

統計資訊不準確

執行計畫中的成本估算不等同於實際的執行計畫的成本

mysql優化器所認為的最有可能與你認為的最優的不一樣

mysql從不考慮其他併發的查詢,這可能會影響當前的查詢速度

mysql有時候也會基於一些固定的規則來生成執行計畫

mysql不會考慮不受其控制的成本

七  mysql優化器可優化的sql型別

重新定義表的關聯順序

將外連線轉換為內連線

使用等價變換規則將(5=5 and a>5)將改寫a>5

優化count(),min(),max()

將乙個表示式轉化為常數表示式

使用等價變換規則

子查詢優化

提前終止查詢

八 如何確定查詢各個階段所消耗的時間

使用profile

set profiling=1;啟動profile,這是乙個session級的配置

show profiles;檢視每乙個查詢所消耗的時間

show profile for query n

九 特定sql的查詢優化

大表的修改最好分批處理

如何修改大表的表結構

對錶中的列欄位進行修改,改變欄位的寬度時還是會鎖表,直接操作的化無法解決主從資料庫延遲的問題

解決辦法:先建乙個**,然後將舊表的資料同步給新錶,然後刪除舊表

如何優化not in和<>查詢

使用彙總表優化查詢

unino操作用於合併兩個或多個select語句的結果集。預設地,union操作選取不同的值。如果允許重複的值,請使用union all

查詢優化(MySQL優化查詢)

關聯查詢太多join 設計缺陷或不得已的需求 資料庫伺服器調優及各個引數設定不適當 緩衝 執行緒數等 慢查詢日誌 找出執行速度慢的sql語句 慢查詢的開啟並捕獲 explain 慢sql分析 show profile查詢sql在mysql伺服器裡面的執行細節和生命週期情況 sql資料庫伺服器的引數調...

mysql統計查詢優化 Mysql查詢優化

效能涉及的層面很多,但是在操作層面,主要有表結構設計優化 索引優化和查詢優化 查詢的生命週期大致可以分為,從客戶端 到服務端 在伺服器上解析 生成執行計畫 執行 返回結果給客戶端 sql執行流程 具體優化技巧 1.消除外連線 2.消除子查詢 盡量用join代替子查詢,雖說mysql查詢優化器會進行優...

MySQL優化 查詢優化

在每乙個消耗大量時間的查詢中,都能看到一些不必要的額外操作 某些操作被額外地重複了很多次 某些操作執行得太慢等。優化查詢的目的就是減少和消除這些操作所花費的時間。查詢效能低下最基本的原因是訪問的資料太多。所以需要考慮是否向資料庫請求了不需要的資料 1 多表關聯時,或獲取單錶資料時,盡量避免不加思考地...