(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 ...