mysql優化總結

2021-05-18 15:31:43 字數 2521 閱讀 2337

如果大家有異議,可以在後面補充。我會隨時更新的。

現在大概列出如下:(望各位補充)

1.資料庫的設計

盡量把資料庫設計的更小的佔磁碟空間.

1).盡可能使用更小的整數型別.(mediumint就比int更合適).

2).盡可能的定義欄位為not null,除非這個字段需要null.(

這個規則只適合欄位為key的情形)

3).如果沒有用到變長字段的話比如varchar,那就採用固定大小的紀錄格式比如char.(char 總是比varchr快)

4).表的主索引應該盡可能的短.這樣的話每條紀錄都有名字標誌且更高效.

5).只建立確實需要的索引。索引有利於檢索記錄,但是不利於快速儲存記錄。如果總是要在表的組合欄位上做搜尋,那麼就在這些欄位上建立索引。索引的第一部分必須是最常使用的字段.如果總是需要用到很多字段,首先就應該多複製這些字段,使索引更好的壓縮。

(這條只適合myisam引擎的表,對於innodb則在儲存記錄的時候關係不大,因為innodb是以事務為基礎的,如果想快速儲存記錄的話,特別是大批量的匯入記錄的時候)

6).所有資料都得在儲存到資料庫前進行處理。

7).所有欄位都得有預設值。

8).在某些情況下,把乙個頻繁掃瞄的表分成兩個速度會快好多。在對動態格式表掃瞄以取得相關記錄時,它可能使用更小的靜態格式表的情況下更是如此。 (

具體的表現為:myisam表的merge型別,以及myisam和innodb通用的分割槽,詳情見手冊)

9).不會用到外來鍵約束的地方盡量不要使用外來鍵。

2.系統的用途

1).及時的關閉對mysql的連線。

2).explain 複雜的sql語句。(

這樣能確定你的select 語句怎麼優化最佳)

3).如果兩個關聯表要做比較話,做比較的字段必須型別和長度都一致.(

在資料龐大的時候建立index)

4).limit語句盡量要跟order by或者 distinct.這樣可以避免做一次full table scan.

5).如果想要清空表的所有紀錄,建議用truncate table tablename而不是delete from tablename.

不過有乙個問題,truncate 不會在事務處理中回滾。因為她要呼叫create table 語句。 (

truncate table 語句先刪除表然後再重建,這個是屬於檔案級別的,所以自然快n多)

實測例子:

song2為innodb表。

mysql> select count(1) from song2;

+----------+

| count(1) |

+----------+

|   500000 |

+----------+

1 row in set (0.91 sec)

mysql> delete from song2;

query ok, 500000 rows affected (15.70 sec)

mysql> truncate table song2;

query ok, 502238 rows affected (0.17 sec)

6).能使用store procedure 或者 user function的時候.(

routine總是減少了伺服器端的開銷)

7).在一條insert語句中採用多重紀錄插入格式.而且使用load data infile來匯入大量資料,這比單純的indert快好多.(

在mysql中具體表現為:insert into tableq values (),(),...();) (

還有就是在myisam表中插入大量記錄的時候先禁用到keys後面再建立keys,具體表現語句:

alter table table1 disable keys;alter table table1 enable keys;

而對於innnodb 表在插入前先 set autocommit=0;完了後:set autocommit=1;這樣效率比較高。)

8).經常optimize table 來整理碎片.

9).還有就是date 型別的資料如果頻繁要做比較的話盡量儲存在unsigned int 型別比較快。

3.系統的瓶頸

1).磁碟搜尋.

並行搜尋,把資料分開存放到多個磁碟中,這樣能加快搜尋時間.

2).磁碟讀寫(io)

可以從多個媒介中並行的讀取資料。

3).cpu週期

資料存放在主記憶體中.這樣就得增加cpu的個數來處理這些資料。

4).記憶體頻寬

當cpu要將更多的資料存放到cpu的快取中來的話,記憶體的頻寬就成了瓶頸.

mysql中有查詢快取記憶體,使用快取記憶體的語句格式:select   sql_cache   *   from   tablea   where   ... 

mysql優化總結

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

mySQL優化總結

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

mysql優化總結

1.索引優化 1 1 資料大並且查詢多的地方使用索引 1 2 注意復合索引的最左原則 2.盡量不使用子查詢,用連線 join 去替換子查詢 3.連線表的時候,有篩選連表條件的在on加上 4.對結果集沒影響的情況下,選擇最小的表做驅動表 5.where條件排序應遵循乙個原則 排除越多的條件放在第乙個 ...