mysql 優化
一、使用索引進行優化
在mysql中,建立資料表後會生成資料檔案,索引檔案,字尾名為.myi的檔案就是索引檔案。索引的原理就是通過空間換取時間,所以索引並不是建立的越多越好。
我們可以通過explain的結果來分析該查詢語句是否使用了索引。通過檢視type,extra和rows的結果是可以看出來的。
type的結果為all表示肯定沒有使用索引;
extra的結果中如果是using index則表示使用了索引,如果extra的結果為空則表示沒有使用索引。
rows的結果如果等於全錶行數,則也表示索引沒有被使用。
舉例說明:
eg1、沒有使用索引的結果:

在這裡的結果中type是為all,表示進行的是全表掃描,rows的結果為7,涉及的行數為全表的行數;
eg2、使用了索引的結果:

建立了索引後,type的結果為ref,不再是all,表示至少使用了一個索引,rows中涉及的行數為1,而不是全表的行數;此時sql語句的效能得到明顯的提升;
二、mysql server優化
2.1 innodb儲存引擎記憶體進行優化;
innodb是用一塊記憶體區做io快取池,該快取池用來快取innodb的索引塊和快取innodb的資料塊;
innodb_buffer_pool_size: 該變數決定了innodb儲存引擎表資料和索引資料的最大快取區大小,設定比較合理的話,能提高事務操作的效率;
innodb_log_buffer_size: 該變數決定了innodb重做日誌快取的大小,對於可能產生大量更新記錄的事務,增加innodb_log_buffer_size的大小,可以避免innodb在事務提交前就執行不必要的日誌寫入磁碟操作。
2.2 修改併發相關的引數
a、調整max_connections,提高併發連線數;
b、調整thread_cache_size,加快連線資料庫的速度,mysql會快取一定數量的客戶服務執行緒以備重用,通過thread_cache_size可控制mysql快取客戶服務執行緒的數量
c、innodb_lock_wait_timeout: 控制innodb事務等待行鎖的時間,對於快速處理的sql語句,可以將行鎖的等待超時時間調小,以避免事務長時間掛起,對於後臺執行的批處理操作,可以讓等待超時時間調大,以避免發生大的回滾操作;
三、應用程式優化
3.1、訪問資料庫時採用連線池
3.2、採用快取減少對於mysql的訪問
a、避免對同一個資料庫做重複檢索
在編寫sql的時候,對同一個表儘可能
b、使用查詢快取
c、快取引數的配置
query_cache_type:是否開啟快取
query_cache_size: 快取使用的記憶體空間大小
query_cache_min_res_unit: 分配記憶體塊時的最小單位大小
query_cache_limit:mysql能夠快取的最大結果,如果超出,則增加qcache_not_cached的值,並刪除查詢結果;
3.3、使用負載均衡機制
Mysql效能優化 四 MySQL優化
mysql 優化 一 使用索引進行優化 在mysql中,建立資料表後會生成資料檔案,索引檔案,字尾名為.myi的檔案就是索引檔案。索引的原理就是通過空間換取時間,所以索引並不是建立的越多越好。我們可以通過explain的結果來分析該查詢語句是否使用了索引。通過檢視type,extra和rows的結果...
MySQL 效能優化
訪問量越來越大,mysql 自然成為瓶頸,因此最近我一直在研究mysql的優化,第一步自然想到的是mysql系統 引數的優化,作為一個訪問量很大的 日20萬人次以上 的資料庫 系統,不可能指望mysql預設的系統引數能夠讓mysql執行得非常順暢。通過在網路上查詢資料和自己的嘗試,我認為以下系統引數...
MySQL 效能優化
做點東西要用到mysql故近來在學習mysql,和學習其他的資料庫一樣,總覺得建表容易,但是要讓資料庫良好的執行卻不那麼簡單.下面是一些mysql效能優化方面的知識 看了一下,受益非淺.注意 index name,age 表示在name,age兩列上建立聯合索引 由於索引對資料庫的查詢效能有著至關重...