mysql優化總結

2021-10-05 03:11:47 字數 1515 閱讀 5234

1.索引優化

1-1 資料大並且查詢多的地方使用索引

1-2 注意復合索引的最左原則

2.盡量不使用子查詢,用連線(join)去替換子查詢

3.連線表的時候,有篩選連表條件的在on加上

4.對結果集沒影響的情況下,選擇最小的表做驅動表

5.where條件排序應遵循乙個原則:排除越多的條件放在第乙個

1.檢視狀態  show variables like "pro%";

2.開啟  set profiling = 1;

3.檢視檢視記錄 show profiles;

4.檢視記錄詳情  show profile for query 1;

或 show profile cpu for query 1;

或 show profile cpu,block io for query 1;

用法在查詢語句前加上explain關鍵字即可。返回結果集的常數有如下:

id:選擇識別符號

select_type:表示查詢的型別。

table:輸出結果集的表

partitions:匹配的分割槽

type:表示表的連線型別

possible_keys:表示查詢時,可能使用的索引

key:表示實際使用的索引

key_len:索引欄位的長度

ref:列與索引的比較

rows:掃瞄出的行數(估算的行數)

filtered:按表條件過濾的行百分比

extra:執**況的描述和說明

其中主要看的字段有:

table:顯示這一步所訪問資料庫中表名稱(顯示這一行的資料是關於哪張表的),有時不是真實的表名字,可能是簡稱

type:all、index、range、 ref、eq_ref、const、system、null(從左到右,效能從差到好)

all:full table scan, mysql將遍歷全表以找到匹配的行

index: full index scan,index與all區別為index型別只遍歷索引樹

range:只檢索給定範圍的行,使用乙個索引來選擇行

ref: 表示上述表的連線匹配條件,即哪些列或常量被用於查詢索引列上的值

eq_ref: 類似ref,區別就在使用的索引是唯一索引,對於每個索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連線中使用primary key或者 unique key作為關聯條件

const、system: 當mysql對查詢某部分進行優化,並轉換為乙個常量時,使用這些型別訪問。如將主鍵置於where列表中,mysql就能將該查詢轉換為乙個常量,system是const型別的特例,當查詢的表只有一行的情況下,使用system

null: mysql在優化過程中分解語句,執行時甚至不用訪問表或索引,例如從乙個索引列裡選取最小值可以通過單獨索引查詢完成

key:key列顯示mysql實際決定使用的鍵(索引),必然包含在possible_keys中

rows:估算出結果集行數,表示mysql根據表統計資訊及索引選用情況,估算的找到所需的記錄所需要讀取的行數

mysql優化總結

如果大家有異議,可以在後面補充。我會隨時更新的。現在大概列出如下 望各位補充 1.資料庫的設計 盡量把資料庫設計的更小的佔磁碟空間.1 盡可能使用更小的整數型別.mediumint就比int更合適 2 盡可能的定義欄位為not null,除非這個字段需要null.這個規則只適合欄位為key的情形 3...

mysql優化總結

1 資料庫設計 滿足三大正規化 第一正規化 列的原子性 第二正規化 確保表中的每列都和主鍵相關,乙個表只能儲存一類資料,不能放多類的資料,第三正規化 確保同一行資料不存在傳遞關係 2 資料庫建表 1 儲存引擎選擇 需要支援事務 外來鍵 更新和查詢都很頻繁的使用innodb,如果要使用全文索引 資料更...

mySQL優化總結

mysql通過explain命令輸出執行計畫,對要執行的查詢在這裡插入描述進行分析。執行計畫的限制 無法展示儲存過程,觸發器,udf 自定義函式 對查詢的影響 無法使用explain對儲存過程進行分析 早期版本的mysql只支援對select語句進行分析,如果想要分析update,insert語句需...