1. 慢查詢日誌
2. 檢視問題sql的執行計畫
3. 優化慢sql
4. 檢視慢sql執行時的效能使用情況
5. 調整系統引數
6. 提公升伺服器硬體1. 引數,開啟sql
sql:2. 日誌格式set global slow_query_log = on;
set global long_query_time = 1;
配置檔案:
[mysqld]
slow_query_log=on
long_query_time=1
# time: 210317 10:12:45
# user@host: mysql[mysql] @ [192.168.233.1] id: 7
# query_time: 2.072475 lock_time: 0.000040 rows_sent: 1 rows_examined: 1197821
set timestamp = 1615947165;
select * from `t` where amount = 48342.84;
3. 慢查詢分析工具
1) 命令
mysqldumpslow -s t -t 10 -g 「left join」 /var/lib/mysql/slow.log
2)引數
-s:是表示按照何種方式排序
al 平均鎖定時間
ar 平均返回記錄時間
at 平均查詢時間(預設)
c 計數
l 鎖定時間
r 返回記錄
t 查詢時間
-t:是top n的意思,即為返回前面多少條的資料
-g:後邊可以寫乙個正則匹配模式,大小寫不敏感的
explain 命令
select 查詢的識別符號. 每個 select 都會自動分配乙個唯一的識別符號.
2. select_type
select 查詢的型別.
1)******
沒有union,沒有子查詢。
2)primary
乙個需要union操作或者含有子查詢的select,位於最外層的單位查詢的select_type即為primary。
3)union
union連線的兩個select查詢,第乙個查詢是dervied派生表,除了第乙個表外,第二個以後的表select_type都是union。
4)dependent union
與union一樣,出現在union 或union all語句中,但是這個查詢要受到外部查詢的影響。
5)union result
包含union的結果集,在union和union all語句中,因為它不需要參與查詢,所以id欄位為null。
6)subquery
除了from字句中包含的子查詢外,其他地方出現的子查詢都可能是subquery。
7)dependent subquery
與dependent union類似,表示這個subquery的查詢要受到外部表查詢的影響。
8)derived
from字句**現的子查詢,也叫做派生表,其他資料庫中可能叫做內聯檢視或巢狀select。
3. table
查詢的是哪個表
4. partitions
匹配的分割槽
5. type
顯示的是單位查詢的連線型別或者理解為訪問型別根據效能:
system
表中只有一行資料或者是空表
const
使用唯一索引或者主鍵
eq_ref
唯一性索引掃瞄,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃瞄
ref非唯一性索引掃瞄,返回匹配某個單獨值的所有行,本質上也是一種索引訪問,它返回所有匹配某個單獨值的行,然而,它可能會找到多個符合條件的行,所以他應該屬於查詢和掃瞄的混合體。
fulltext
ref_or_null
unique_subquery
index_subquery
range
索引範圍掃瞄,常見於使用》,
index_merge
index
select結果列中使用到了索引,type會顯示為index。
all全表掃瞄資料檔案,然後再在server層進行過濾返回符合要求的記錄。
6. possible_keys
此次查詢中可能選用的索引
7. key
此次查詢中確切使用到的索引.
8. ref
哪個欄位或常數與 key 一起被使用
如果是使用的常數等值查詢,這裡會顯示const9. rows如果是連線查詢,被驅動表的執行計畫這裡會顯示驅動表的關聯字段
如果是條件使用了表示式或者函式,或者條件列發生了內部隱式轉換,這裡可能顯示為func
顯示此查詢一共掃瞄了多少行. 這個是乙個估計值.
10. filtered
表示此查詢條件所過濾的資料的百分比
11. extra
額外的資訊
1) using filesort
說明mysql會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取。mysql中無法利用索引完成的排序操作稱為「檔案排序」。需要優化sql。
2) using temporary
使用了用臨時表儲存中間結果,mysql在對查詢結果排序時使用臨時表。常見於排序order by和分組查詢group by。需要優化sql。
3) using index
查詢時不需要回表查詢,直接通過索引就可以獲取查詢的結果資料。
4) using where
表示mysql將對storage engine提取的結果進行過濾,過濾條件欄位無索引。
5) impossible where
where子句的值 總是false ,不能用來獲取任何元組。
1. 索引優化
2.limit 優化
3. 其他查詢優化query profiler是mysql自帶的一種query診斷分析工具,通過它可以分析出一條sql語句的硬體效能瓶頸在什麼地方。
1. 緩衝區優化
2. 降低磁碟寫入次數
3. mysql配置優化
5) MySQL插入資料
mysql insert語句允許您將一行或多行插入到表中。下面說明了insert語句的語法 insert into table column1,column2.values value1,value2,首先,在insert into子句之後,在括號內指定表名和逗號分隔列的列表。然後,將括號內的相應列...
5 mysql 常用儲存引擎
mysql5.5之前預設儲存引擎是myisam,5.5之後改為innodb。若要修改預設引擎,可以修改配置檔案中的default storage engine。可以通過show engines來檢視當前資料庫支援的引擎。使用select engine from information schema....
Flask學習 5 mysql基礎
未利用資料庫連線池 import pymysql db pymysql.connect host 127.0.0.1 user root port 3306,password 111111 db test cursor db.cursor 建立字典游標 cursor db.cursor pymysq...