mysql 非等值条件 索引_慢SQL简述与定位
慢SQL日志簡述
通過命令和查看日志文件的方式直接查看mysql服務器的慢sql
參數(shù)配置
參數(shù)作用slow_query_log是否啟用
slow_query_log_file日志文件
long_query_time慢sql閾值
log_slow_adimin_statements是否記錄數(shù)據(jù)庫管理相關(guān)的sql
long_queries_not_using_indexes是否記錄未使用索引的sql
### 慢日志內(nèi)容
內(nèi)容描述
-----------
#Time:2020-09-27T22:27:56.343654Z日志時間
#User@Host:root@huan[127.0.0.1]id:2客戶端主機
#Query_time:3.346928 Lock_time:0.000482 Rows_sent:1 Rows_examined:5003427執(zhí)行時間(s), 鎖時間, 返回結(jié)果行數(shù), 查詢總行數(shù)
SET timestamp=1588763242sql執(zhí)行發(fā)生時間
select count(*) from poemsql內(nèi)容
### 日志分析輔助工具mysqldumpslow
例如:查詢最慢的前100條sql
mysqldumpslow -t 100 /var/lib/mysql/slow.log
主要功能是, 統(tǒng)計不同慢sql的
出現(xiàn)次數(shù)(Count),
執(zhí)行最長時間(Time),
累計總耗費時間(Time),
等待鎖的時間(Lock),
發(fā)送給客戶端的行總數(shù)(Rows),
掃描的行總數(shù)(Rows),
用戶以及sql語句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).
索引概述
聚集索引(聚簇索引)
InnoDB表都有一個稱為聚集索引的特殊索引(默認主鍵,沒有則是唯一鍵,都沒有則選擇隱式的rowid鍵)
二級索引(非聚簇索引)
所有非聚集索引,都稱為二級索引
單列索引
索引只涉及一個列
多列索引(復合索引、聯(lián)合索引、組合索引)
索引涉及多個列(最多16列)
覆蓋索引
它本身不是一種索引,只是查詢語句所需要的列被包含在查詢條件中的索引里面,直接通過索引查詢出結(jié)果,不需要回表查詢
如:select id from user where id < 100
查詢優(yōu)化器概述
查詢優(yōu)化器的任務是找到執(zhí)行sql查詢的最佳計劃,是mysql數(shù)據(jù)庫的一個核心功能模塊。根據(jù)表、列、索引的詳細信息以及sql語句中的條件,多方面來讓sql高效的執(zhí)行。
優(yōu)化器選擇出的執(zhí)行效率最高的一組操作,稱之為查詢計劃。
查詢優(yōu)化器優(yōu)化過程:
準備階段
補全sql(* 轉(zhuǎn) 對應字段)
優(yōu)化階段
條件優(yōu)化(常量傳遞、等值替換、移除無用條件)
例如:5=5 and a>5 改寫為 a>5
(a5 and b=c and a= 5
表依賴關(guān)系分析
查看用到的ref所以索引
評估記錄掃描數(shù)、成本分析
執(zhí)行計劃
id: MySQL Query Optimizer 選定的執(zhí)行計劃中查詢的序列號。表示查詢中執(zhí)行 select 子句或操作表的順序,id值越大優(yōu)先級越高,越先被執(zhí)行。id 相同,執(zhí)行順序由上至下。
select_type:查詢類型,SIMPLE、PRIMARY、UNION、DEPENDENT UNION等。
table:顯示這一行的數(shù)據(jù)是關(guān)于哪張表的
type:這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、range、indexhe和all
possible_keys:顯示可能應用在這張表中的索引。如果為空,沒有可能的索引??梢詾橄嚓P(guān)的域從where語句中選擇一個合適的語句
key: 實際使用的索引。如果為null,則沒有使用索引。很少的情況下,mysql會選擇優(yōu)化不足的索引。這種情況下,可以在select語句中使用
use index(indexname)來強制使用一個索引或者用ignore index(indexname)來強制mysql忽略索引
key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數(shù)
rows:mysql認為必須檢查的用來返回請求數(shù)據(jù)的行數(shù)
extra:關(guān)于mysql如何解析查詢的額外信息。
總結(jié)
以上是生活随笔為你收集整理的mysql 非等值条件 索引_慢SQL简述与定位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 编译报错
- 下一篇: 测试流程图_挑战美国Postman VS