mysql效能調優

2022-09-20 08:21:13 字數 2744 閱讀 8572

1. 伺服器效能引數查詢

show [global|session] status like '引數'

;一些常用的效能引數如下:

• connections:連線mysql伺服器的次數。

• uptime:mysql伺服器的上線時間。

• slow_queries:慢查詢的次數。

• innodb_rows_read:select查詢返回的行數

• innodb_rows_inserted:執行insert操作插入的行數

• innodb_rows_updated:執行update操作更新的行數

• innodb_rows_deleted:執行delete操作刪除的行數

• com_select:查詢操作的次數。

• com_insert:插入操作的次數。對於批量插入的 insert 操作,只累加一次。

• com_update:更新操作的次數。

• com_delete:刪除操作的次數。

• last_query_cost:上次查詢涉及到的資料頁數。

2. 慢查詢

1. 檢視慢查詢是否開啟

show variables like

'%slow_query_log%

'2. 開關慢查詢(只有在需要調優的時候開啟,其餘時間應該關閉,因為它會影響效能)

set

global slow_query_log='on'

;set global slow_query_log='off';

3. 檢視慢查詢的閾值 show variables like 

'%long_query_time%

'; 4. 修改慢查詢閾值(也可以通過配置檔案修改,但是需要重啟服務) set

global long_query_time = 1; #

全域性修改,下次重啟會失效 set long_query_time=1; #

本次回話修改 ,下次重啟會失效

5. 檢視慢查詢的條數

show global status like '%slow_queries%';

3. 慢查詢日誌分析工具 :mysqldumpslow

4. 檢視sql執行成本

1. 檢視是否開啟

show variables like

'profiling';

2. 修改狀態

set profiling = '

on'; #

'off'

3. 檢視當前回話的所有profiles

show profiles;

4. 檢視具體sql的執行成本

show profiles;

#最近一條sql

show profile cpu,block io for query 2; #

檢視第2條sql的執行成本,2來自於show profiles結果的序號

5. explain

1. 各個欄位的含義

1. 關於id

id如果相同,可以認為是一組,從上往下順序執行

在所有組中,id值越大,優先順序越高,越先執行

關注點:id號每個號碼,表示一趟獨立的查詢, 乙個sql的查詢趟數越少越好

2. select_type

mysql為每乙個select關鍵字代表的小查詢都定義了乙個select_type屬性,它表示了小查詢在大查詢彙總扮演的角色
3. type(重點)

結果值從最好到最壞依次是: 

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge >unique_subquery > index_subquery > range > index >all

sql 效能優化的目標:至少要達到 range 級別,要求是 ref 級別,最好是 consts級別。(阿里巴巴開發手冊要求)

4. rows: 預估需要掃瞄的條數,值越小越好

6. explain的不同輸出格式

1. explain select ... #

傳統格式

2. explain format=json select ... #

json格式,輸出的資訊額外包含執行成本

3. explain format=tree select ... #

輸出的資訊量很少

7. 索引失效的情況

計算、函式、型別轉換(自動或手動)會導致索引失效

聯合索引有最左字首原則

聯合索引時,範圍字段右側的索引全部失效

不等於(!= 或者<>)索引失效

is null可以使用索引,is not null無法使用索引(大部分情況下,列中不應該出現null,即使有,應該給個預設值)

like以萬用字元%開頭索引失效

or 前後存在非索引的列,索引失效。非索引列會導致掃瞄全表,如果兩個都是索引列,會index_merge,兩個索引都走,讀最後的結果union

資料庫和表的字符集應該統一使用utf8mb4

mysql效能調優

1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在where子句中對字段進行null判斷,否則會導致引擎放棄使用索引而進行全表掃瞄。3.應盡量避免在where子句中使用 或 操作符,否則會導致引擎放棄使用索引而進行全表掃瞄。4...

Mysql效能調優

mysql 效能調優有很多方面,主要是這幾個方面 1 正規化 是指表的列具有原子性,不可再拆分,只要資料庫是線性的,都自動滿足1nf。2 正規化 表中的紀錄是唯一的。3 正規化 表中資料不應該有冗餘,如果通過某個欄位就能得到跟該字段相關的資訊,就沒必要將這些資訊,再存放到該表中。在3nf中,可能會對...

MySQL效能調優

1 經常用來讀的表使用myisam儲存引擎 2 其餘的表都用innodb儲存引擎 1 在select where order by常涉及到的字段上建立索引 2 where子句中不使用 否則將放棄使用索引進行全表掃瞄 3 盡量避免用null值判斷,否則會全表掃瞄 示例 select id from t...