MySQL資料庫優化的詳細教程

2021-12-30 09:04:10 字數 2642 閱讀 5309

(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資料庫的整體效能,而另一方面需要合理的結構設計和引數調整,以提高使用者的相應速度,同時還要盡可能的節約系統資源,以便讓系統提供更大的負荷.1.優化一覽圖 2.優化 筆者將優化分為了兩大類,軟優化和硬優化,軟優化一般是運算元據庫即可,而硬優化則是操作伺服...

mysql分頁優化詳細教程

一般剛開始學sql的時候,會這樣寫 select from table order by id limit 1000,10 但在資料達到百萬級的時候,這樣寫會慢死 select from table order by id limit 1000000,10 也許耗費幾十秒 網上很多優化的方法是這樣的...

mysql資料庫的優化

先學習一下mysql的相關優化問題,主要是從提高mysql資料庫伺服器的效能的思路進行考慮,主要包含以下8個方面的優化 1 選取最適用的字段屬性 2 使用連線 join 來代替子查詢 sub queries 3 使用聯合 union 來代替手動建立的臨時表 4 事務 5 鎖定表 6 使用外來鍵 7 ...