Mysql效能優化 四 MySQL優化

2023-01-20 00:15:58 字數 1786 閱讀 8285

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兩列上建立聯合索引 由於索引對資料庫的查詢效能有著至關重...