mysql的優化 MySQL優化

2021-10-18 11:44:32 字數 2865 閱讀 8288

一、sql語句優化

(1)使用limit對查詢結果的記錄進行限定

(2)避免select *,將需要查詢的字段列出來

(3)使用連線(join)來代替子查詢

(4)拆分大的delete或insert語句

二、選擇合適的資料型別

(1)使用可存下資料的最小的資料型別,整型 < date,time < char,varchar < blob

(2)使用簡單的資料型別,整型比字元處理開銷更小,因為字串的比較更複雜。如,int型別儲存時間型別,bigint型別轉ip函式

(3)使用合理的字段屬性長度,固定長度的表會更快。使用enum、char而不是varchar

(4)盡可能使用not null定義字段

(5)盡量少用text,非用不可最好分表

三、選擇合適的索引列

(1)查詢頻繁的列,在where,group by,order by,on從句**現的列

(2)where條件中,>=,between,in,以及like 字串+萬用字元(%)出現的列

(3)長度小的列,索引字段越小越好,因為資料庫的儲存單位是頁,一頁中能存下的資料越多越好

(4)離散度大(不同的值多)的列,放在聯合索引前面。檢視離散度,通過統計不同的列值來實現,count越大,離散程度越高:

mysql> select count(distinct column_name) from table_name;

四、使用命令分析

(1)show檢視狀態

1.顯示狀態資訊

mysql> show [session|global] status like '%status_name%';

session(預設):取出當前視窗的執行

global:從mysql啟動到現在

(a)檢視查詢次數(插入次數com_insert、修改次數com_insert、刪除次數com_delete)

mysql> show status like 'com_select';

(b)檢視連線數(登入次數)

mysql> show status like 'connections';

(c)資料庫執行時間

mysql> show status like 'uptime';

(d)檢視慢查詢次數

mysql> show status like 'slow_queries';

(e)檢視索引使用的情況:

mysql> show status like 'handler_read%';

handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數。

handler_read_rnd_next:這個值越高,說明查詢低效。

2.顯示系統變數

mysql> show variables like '%variables_name%';

3.顯示innodb儲存引擎的狀態

mysql> show engine innodb status;

(2)explain分析查詢

mysql> explain select column_name from table_name;

explain查詢sql執行計畫,各列含義:

table:表名;

type:連線的型別

-const:主鍵、索引;

-eq_reg:主鍵、索引的範圍查詢;

-ref:連線的查詢(join)

-range:索引的範圍查詢;

-index:索引的掃瞄;

-all:全表掃瞄;

possible_keys:可能用到的索引;

key:實際使用的索引;

key_len:索引的長度,越短越好;

ref:索引的哪一列被使用了,常數較好;

rows:mysql認為必須檢查的用來返回請求資料的行數;

extra:using filesort、using temporary(常出現在使用order by時)時需要優化。

-using filesort  額外排序。看到這個的時候,查詢就需要優化了

-using temporary 使用了臨時表。看到這個的時候,也需要優化

(3)profiling分析sql語句

1.開啟profile。檢視當前sql執行時間

mysql> set profiling=on;mysql> show profiles;

2.檢視所有使用者的當前連線。包括執行狀態、是否鎖表等

mysql> show processlist;

(4)procedure analyse()取得建議

通過分析select查詢結果對現有的表的每一列給出優化的建議

mysql> select column_name from table_name procedure analyse();

(5)optimize table**閒置的資料庫空間

mysql> optimize table table_name;

對於myisam表,當表上的資料行被刪除時,所佔據的磁碟空間並沒有立即被**,使用命令後這些空間將被**,並且對磁碟上的資料行進行重排(注意:是磁碟上,而非資料庫)。

對於innodb表,optimize table被對映到alter table上,這會重建表。重建操作能更新索引統計資料並釋放成簇索引中的未使用的空間。

只需在批量刪除資料行之後,或定期(每週一次或每月一次)進行一次資料表優化操作即可,只對那些特定的表執行。

(6)repair table修復被破壞的表

mysql> repair table table_name;

(7)check table檢查表是否有錯誤

mysql> check table table_name;

五、定位慢查詢

六、分割槽

七、配置優化

mysql 隨機優化 mysql 優化

mysql優化包括兩方面,一方面是sql優化,另一方面是資料庫配置優化 一 sql優化 1.優化資料型別 盡量將字段設定為 not null,如果你要儲存null,手動去設定它,而不是把它設為預設值 盡量可能的使用更小的字段,但也不要太過執著減小資料型別,要為以後的程式拓展預留一定的空間 盡量少用v...

mysql 深入優化 Mysql的深入優化

ok,廢話不多說,上乾貨。調優思路 0.硬體優化 1.資料庫設計與規劃 以後再修改很麻煩,估計資料量,使用什麼儲存引擎 2.資料的應用 怎樣取資料,sql 語句的優化 3.磁碟 io 優化 4.mysql 服務優化 記憶體的使用,磁碟的使用 5.my.cnf 內引數的優化。0.硬體優化 cpu 64...

mysql的效能優化 mysql效能優化

檢視安裝指令碼 select version 非互動式超時時間,如jdbc show global variables like wait timeout 互動式超時時間,如資料庫工具 show global variables like interactive timeout show sessi...