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語句需...