mysql學習之sql優化

 

慢查詢日誌分析問題sql

slow_query_log  啓動或者停止慢查詢日誌

slow_query_log_file 指定慢查詢日誌的存儲路徑和文件

long_query_time  指定記錄慢查詢日誌的閾值通常改爲0.001秒也就是1毫秒

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

常用的慢查詢日誌分析工具

mysqldumpslow

pt-query-digest

實時獲取問題sql

select id,user,host,DB,command,time,state,info from 
information_schema.PROCESSLIST where TIME>60

SQL的解析預處理以及執行計劃

  • 客戶端發送sql請求給服務器
  • 服務器檢查是否可以在查詢緩存中命中該sql
查詢緩存對性能的影響(讀寫頻繁可以關閉)

query_cache_type  設置查詢緩存是否可用

query_cache_size  設置查詢緩存的內存大小

query_cache_limit  設置查詢緩存可用存儲的最大值

query_cache_wlock_invalidate  數據表被鎖後是否返回緩存中的數據

query_cache_min_res_unit   設置查詢緩存分配的內存塊最小單位
  • 服務器執行sql解析,預處理,再由優化器生成對應的執行計劃
  • 根據執行計劃調用存儲引擎API來查詢數據
  • 將結果返回給客戶端

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

使用profile  //session 級別

set profiling = 1;

執行查詢

show profiles //查看每一個查詢所消耗的總時間的信息

show profile for query N  //查詢每個階段所消耗的時間  N是上過命令的id

使用performance_schema  //全局級別

如何優化特定的sql?

如何修改大表的結構

pt-online-schema-change //可以參考這個https://blog.csdn.net/yangshangwei/article/details/104152835

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章