簡介
在本文中,主要寫一下自己所查閱和理解的mysql優化方案.
我的理解是資料庫的優化對於我們'非專業'人員,mysql的優化也沒那麼複雜了,真的要玩轉mysql的話,肯定得需要很多年的經驗了.
優化方案
1.搜尋引擎的優化
mysql搜尋引擎用的比較多的有以下三中
innodb
memory
myisam
innodb的適用情況:innodb有處理事務的功能,對於需要處理大量事務的資料庫,innodb是比較合適的.
memory的適用情況:乙個字快!memory是要把資料直接乾到記憶體中,處理速度很快,但是,當伺服器重啟或者宕機資料就沒了呢.所以,這個是適用臨時資料.
myisam的適用情況:速度快,不支援事務.適用於處理資料量大且不用大量處理事務的資料庫.
2.mysql新增索引
什麼情況下適合新增索引
該欄位資料量龐大;
該欄位很少的dml操作(由於索引也需要維護,dml操作多的話,也影響檢索效率);
該欄位經常出現在where條件中;
只要列中含有null值,就最好不要在此例設定索引,復合索引如果有null值,此列在使用時也不會使用索引
盡量使用短索引,如果可以,應該制定乙個字首長度
對於經常在where子句使用的列,最好設定索引,這樣會加快查詢速度
對於有多個列where或者order by子句的,應該建立復合索引
對於like語句,以%或者『-』開頭的不會使用索引,以%結尾會使用索引
盡量不要在列上進行運算(函式操作和表示式操作)
盡量不要使用not in和<>操作
注意:實際開發中會根據專案需求等綜合因素來做調整,新增索引並不能保證一定能夠提公升檢索效率,索引新增不當也有可能會導致效率降低。
3.sql語句的優化
sql語句的優化,主要一點就是,盡量避免全文搜尋,就是我要找個東西,我不能在那麼多的資料中找到我想要的資料.最好就是,我可以在資料庫中搜尋最小的範圍得到我想要的資料.
查詢時,能不要*就不用*,盡量寫全欄位名
大部分情況連線效率遠大於子查詢
多使用explain和profile分析查詢語句
檢視慢查詢日誌,找出執行時間長的sql語句優化
多表連線時,盡量小表驅動大表,即小表 join 大表
在千萬級分頁時使用limit
對於經常使用的查詢,可以開啟快取
其實還有很多的,主要把握"查最少的資訊,獲得我所需要的內容"這個核心就行了.
4.表的優化
其實就一點:分塊!將資料分塊存放.
表的字段盡可能用not null
字段長度固定的表查詢會更快
把資料庫的大表按時間或一些標誌分成小表
將表分割槽
比如乙個城市裡有很多的區,每個區里又有很多的街道小區,乙個城市就顯得很規矩.如果所有的商店寫字樓居民樓都隨意布置,那這個城市就亂的一團糟了.
總結優化資料庫有很多途徑.讓處理資料的效率越高越好,就醬.
Mysql優化方案
client 客戶端編碼方式,最好和服務端儲存一致 loose default character set utf8 mysqld 埠port 3306 mysql根目錄 basedir d ide mysql 5.6.25 winx64 資料檔案存放目錄 datadir d ide mysql 5...
MySQL優化方案
select 和select 欄位的優化。我們先測試一下,我的測試資料庫裡有26萬條記錄。再查詢一下列數 select count from information schema.columns where table schema lezhi data and table name demo jo...
MySql優化方案
mysql優化方案總結 u mysql 資料庫的優化技術 對mysql 優化時乙個綜合性的技術,主要包括 a 表的設計合理化 符合 3nf b 新增適當索引 index 四種 普通索引 主鍵索引 唯一索引 unique 全文索引 c 分表技術 水平分割 垂直分割 d 讀寫 寫 update dele...