Mysql資料庫如何優化?從哪幾個方面考慮?
首先應該想到的是:
加快取,想辦法提高快取命中率
加索引,正確加索引(索引型別,原則方面)
硬體上提高資料庫配置(治標不治本的辦法)
具體下面會一一介紹
對Mysql資料庫的優化三個方向主要分為:
1.優化SQL語句
2.優化資料庫結構
3.優化Mysql伺服器
一.優化SQL語句又分為以下幾個方面:
【1】優化查詢語句
1、通過Explain和Describe關鍵字分析select查詢語句,從而使開發人員知道查詢效率低的原因。
語法如下:explain select * from bookmanager where Name='admin' \G;
2、通過新增索引進行優化
說起資料庫的效能,索引可能使最物美價廉的東西了。使用索引可以快速的定位表中的某條記錄,不用新增記憶體、不用修改程式,也不用呼叫sql語句,只需執行一個建立正確的索引,查詢速度就可能提高千倍萬倍。
索引並不一定是主鍵或者唯一的欄位,如果表中的某個欄位總是被搜尋,就可以為其建立索引。
建立索引的語句如下:
create index index_name on table_name(manName);
使用索引應注意的事項:
(1)使用多列索引時,查詢條件必須使用索引的第一個字元。
(2)like關鍵字配置的字串不能以符號“%”開頭。
(3)or關鍵字連線的所有條件都必須使用索引。如果or前後有一個條件的列不是索引,那麼查詢中講不使用索引。
3、優化Order by
有兩種方式如下:
(1)索引優化:對by後的列新增索引,從而大達到優化的目的。
(2)where+order by 的組合優化:通過where進行限制後在進行order by
4、優化group by (同3中通過加索引和where進行優化)
5、優化limit
6、優化子查詢
在mysql中通過使用連線查詢來代替子查詢,從而達到優化目的。原因:子查詢在執行的時候 資料庫需要位內層查詢語句的查詢結果建立一個臨時表,然後外層語句查詢臨時表,所以子查詢的效率比較低,而連線查詢就不存在這個問題。
總結優化查詢的基本原則如下:
儘可能對每一條執行的sql語句進行Explain
盡力少使用Join(少使用多表查詢)
儘量少排序
儘量避免select * 查詢
儘量使用連線代替子查詢
儘量少使用or關鍵字
儘量使用Union all代替union
儘量早過濾
避免“型別轉換”
優化先優化高併發的sql語句
從全域性出發優化,而不是片面調整
【2】優化其他執行語句
1、優化insert語句
禁用索引,禁用唯一性檢查,使用一條insert插入多條語句。
2、優化update語句
使用一個update語句同時做多個更新。
3、優化delete語句
刪除一條記錄的時間與索引的數量成正比。刪除一個表的所有行,使用truncate table Tbname 而不要使用delete from table
二、優化資料庫結構
1、優化欄位型別
資料庫最耗時的就是IO處理,所以儘可能減少IO讀寫量。
數字型別:儘量不要使用double型別,不僅是長度問題,還有精度問題。對於整數,資料量大時區分TinyInt、Int、BigInt,如果確定不實用負數,新增unsigned定義。
字元型別:儘量不要使用text型別,效能低於char和varchar,定長使用char,不定長使用varchar
時間型別:儘量不使用Timestamp,只精確到某一天的話,可用Date型別。
Enum和Set:狀態欄位用enum,如果存放可預先定義的屬性資料可以嘗試用set
2、優化字元編碼
3、適當進行拆分
4、適當增加冗餘
5、優化資料庫表
三、優化Mysql伺服器
優化原則如下:
記憶體中的資料要比磁碟上的資料訪問的快。
讓資料儘可能長時間的留在記憶體裡能減少磁碟讀寫活動的工作量。
讓索引資訊留在記憶體裡要比讓資料記錄的內容留在記憶體裡更為重要。