SQL高級優化(四)之SQL優化


SQL優化

一、SQL優化簡介

  • 解釋:對於特定的要求,使用更有的SQL策略或索引策略,以達到讓結果呈現的時間更短,從而提升操作效率的過程就是SQL優化。
  • SQL優化包含在數據庫級別優化中。我們平常所說的SQL優化就是指優化SQL語句和索引。
  • SQL優化是伴隨業務而進行優化的,並不是下面的所有操作都必須都達到才是最好的優化。

二、常規調優思路(眾多解決方案之一)

  • 查看slow-log,分析slow-log,分析出查詢慢的語句。
  • 按照一定優先級,進行一個一個的排查所有慢語句。
  • 分析top sql,進行explain調試,查看語句執行語句。
  • 調整索引或語句本身。

MySQL日志支持

一、MySQL5.7中日志分類

​       MySQL日志分類四類:錯誤日志(回滾等)、二進制日志(主從)、通用查詢日志(記錄查詢等信息)、慢查詢日志

二、通用查詢日志

  • 通用查詢日志是記錄建立的客戶端連接和執行的語句
  • 通過show variables like '%version%';查看版本信息

 

  • 可以通過show variables like '%general%'查看通用查詢日志是否卡開啟 general_loh 屬性取值
    • OFF 表示關閉(默認關閉)
    • ON 表示打開

  • 通過查看日志輸出格式
    • File存儲在數據庫的數據文件中的主機名.log C:\ProgramData\MySQL\MySQL Server 5.7\Data
    • TABLE 存儲在數據庫中的mysql/general_log

 

  • 臨時開啟/關閉通用日志(重啟失效)
# 開啟
set global general_log = on;
# 關閉
set global general_log = off;
  • 臨時設置輸出格式(重啟失效)
# mysql/general_log
set global log_output-'TABLE';
# 主機名-slow.log
set global log_output='FILE';
# 兩者都輸出
set global log_output='FILE,TABLE';

 

  • 永久設置。修改MySQL配置文件
  • windows中日志文件在C:\ProgramData\MySQL\MySQL Server 5.7\my.ini中。
  • 按需配置

  • 配置后重啟MySQL服務
  • 日志文件中時間和系統時間不一致問題
  • 查看系統日志文件格式 show variables like '%log_timestamps%';
  • 修改日志文件時間格式為系統時間 set global log_timestamps = SYSTEM

三。錯誤日志

  • MySQL錯誤日志記錄MySQL運行過程中較為嚴重的警告和錯誤信息,以及MySQL啟動和關閉的詳細信息。以及MySQL每次啟動和關閉的詳細信息。
  • 通過show variables like '%log_error%';查看
  • binlog_error_action 錯誤處理方式
  • ABORT_SERVER出現問題終止服務
  • IGNORE_ERROR忽略錯誤
  • log_error錯誤日志文件名及路徑
  • log_error_verbosity記錄級別
  • 取值1表示記錄警告信息
  • 大於1表示所有警告信息都記錄
  • 日志文件可以通過文本編輯器打開。

四、二進制日志

  • 包含所有更新數據(新增、刪除、修改、改表等)SQL信息的記錄。
  • MySQL主從配置就依賴這個日志文件
  • 通過show variables like '%log_bin%';查看二進制日志

  • 二進制日志不可以通過修改全局參數開啟。全局匹配值問下(my.ini)中該參數是注釋的。
# binary Logging
# log-bin

直接設置log-gin的值為日志文件名。

# Binary Logging
log-gin=mylogbin

設置后重啟MySQL服務會發現log_bin參數值為ON

  • 開啟后二進制文件存儲在C:\ProgramData\MySQL\MySQL Server 5.7\Data。里面有個xxx.index文件(這個文件成為二進制文件索引)里面存儲了所有二進制文件清單。當重啟MySQL服務或過一定時間后會自動生成一個二進制文件。增加的二進制文件編號遞增。也可以使用flush logsl命令生成一個新的二進制文件。
  • 也可以通過命令:show binary log;查看目前生成的日志文件。
  • 由於是二進制文件,所以無法直接使用文本編輯器打開,需要借助工具才可以看見。
  • 在navicat或sql命令中輸入mysql show binlog events in 'mylogbin.000003';
  • 在命令行輸入,借助mysqlbinlog工具
  • 輸入命令式要在日志文件所在文件夾路徑中運行,也可以在命令中寫上日志文件全路徑
  • D:/a.sql可以沒有,沒有表示直接大隱刀控制台mysql mysqlbinlog mylogbin.000003 > D:/a.sql
  • binlog中除了刪除IAO創建表的SQL都是加密的,如果希望看見可以使用下面命令
  • 直接打印到控制台會出現中文亂碼mysql mysqlbinlog -base64-output=deode-rows -v mysqlbin.000003 > D:/a.sql

五、慢查詢日志

  • 記錄所有執行時間超過long_query_time秒的所有查詢或不適用於索引的查詢
  • long_query_time默認時間為10秒。即超過10秒的查詢都認為是慢查詢
  • 慢查詢日志默認名稱:住進-slow.log
  • 除了查看my.ini文件以外通過show variables like '%query%';查看

    • slow_query_log 表示是否開啟慢查詢日志。(默認開啟)
    • slow_query_log_file 慢查詢日志文件名
    • long_query_time慢查詢閾值設置,查處為慢查詢。此值直接設置全局參數可能無效,建議測試直接修改配置文件。
    • log_queries_not_using_index是否記錄不適用於索引的查詢(前提是slow_query_log開啟)
    • 可以通過命令查看慢查詢日志中慢查詢SQL命令的個數。也可以使用文本編輯器直接打開慢查詢日志文件。也可以查看mysql.slow_log表中的額數據(前提log_output值包含table)
show status like '%slow_queries%';

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM