咱們常見的數據庫性能優化就是SQL語句優化,確實SQL優化是開發者接觸到最多的也是最常有的優化手段。做爲開發人員咱們接觸最多的也就是SQL語句的優化,SQL語句的優化除了調整SQL語句外更多的是經過添加索引來加速查詢,表結構(合理設計字段、拆分字段到其它表、分表等)的優化也是咱們優化的主要手段。mysql
SQL優化是咱們學習的重點,咱們將全面詳細講解以上SQL優化,可是SQL優化並非數據庫優化的所有,通常來講數據庫性能優化能夠經過如下幾個方面來優化:redis
硬件: 傻子都知道你買個好服務器比你如今用的筆記本數據庫性能要強幾個級別。sql
系統配置: 好的硬件也須要合理的配置(如鏈接數配置、佔用內存等),即便你的硬件服務器性能再好,可是數據庫配置不合適沒有充分利用完硬件性能仍是沒有徹底發揮出硬件的優點。數據庫
數據庫和表結構的設計: 數據庫是用來存儲數據的,數據最終是存儲在磁盤的,查詢數據最終是讀取磁盤上的內容,因此數據庫表結構的設計的好壞會影響到查詢數據時磁盤的操做緩存
SQL及索引: SQL優化是開發者使用最多的優化方式。性能優化
MySQL性能優化是經過優化各個方面的,不只僅是優化SQL語句這一方面,而是經過各各方面的優化,每一個地方優化一些,這樣總體性能就會有明顯的提高。服務器
優化方式併發
優化數據庫表結構的設計elasticsearch
表結構優化主要經過以下方式來優化:ide
字段的數據類型: 不一樣的數據類型的存儲和檢索方式不一樣,對應的性能也不一樣,因此說要合理的選用字段的數據類型。好比人的年齡用無符號的unsignedtinyint便可,不必用integer,數字的處理速度要比字符串處理的速度更快。
數據類型的長度:數據庫最終要寫到磁盤上,因此字段的長度也會影響着磁盤的I/O操做,若是字段的長度很大,那麼讀取數據也須要更多的I/O, 因此合理的字段長度也能提高數據庫的性能。好比用戶的手機號11位長度,不必用255個
長度。
表 的 存 儲 引 擎 : 常 用 的 存 儲 引 擎 有MyISAM、InnoDB、Memory,不一樣的存儲引擎擁有不一樣的特性,因此要合理的利用每種存儲引擎的長處和優勢來提供數據的性能。MyISAM不支持事務,表級鎖,可是查詢速度快,InnoDB支持事務,行鎖。因此表的存儲引擎的選擇也是很是重要。
SQL優化
MySQL性能優化的一個很重要的手段就是對SQL語句的優化。其中最重要的方式就是使用索引。
大表分表
大表是指一個表的數據量很是大,一般是指超過500億條數據量,當一個表的數據量很大的時候,查詢就變的很慢,因此減小表裏的記錄的數量是優化大表的一種方式,這種方式就是將一張表的數據拆分紅多張表,這樣每張表的數量就減小了,這樣查詢速度就相對來講就會快不少。
大表對DDL操做有必定的影響,如建立索引,添加字段修改表結構須要長時間鎖表,會形成長時間的主從延遲,影響正常的數據操做。
大事務
大事務: 運行時間比較長,操做的數據比較多的事務。
風險: 鎖定太多的數據,形成大量的阻塞和鎖超時,回滾時所需時間比較長,執行時間長容易形成主從延遲。
解決方法: 避免一次處理太多的數據,移除沒必要要在事務中的select操做。
數據庫參數配置優化
mysql是一個高度定製化的數據庫系統,提供了不少配置參數(如最大鏈接數、數據庫佔用的內存等),這些參數都有默認值,通常默認值都不是最佳的配置,通常都須要根據應用程序的特性和硬件狀況對mysql的配置進行調整。例如最大鏈接數默認爲100,即便SQL語句優化的再好,硬件設備配置再高,當請求超過100時都要再等待,這就是配置不合理致使MySQL不能發揮它的最大能力。
主從複製,讀寫分離
一臺MySQL服務器同一時間點支持的併發數是有限的,當大量併發(如雙11瘋狂下單、支付)時,一臺數據庫處理不過來,因此增MySQL服務器的數量也是一種加強數據庫性能的方式,通俗的講就是多我的幹活確定比一我的幹活快。經過使用MySQL主從複製,增刪改操做走Master主服務器,查詢走Slaver從服務器,這樣就減小了只有一臺MySQL服務器的壓力。
增長緩存層
減小數據庫鏈接也是一種優化手段,有些查詢能夠不用訪問數據庫,能夠經過使用緩存服務器如redis、memcache、elasticsearch等增長緩存,減小數據庫的鏈接。
升級服務器硬件
當全部優化手段都用了性能還須要優化時,那麼只有升級MySQL服務器端硬件了,更快的磁盤IO設備,更強的CPU,更大的內存,更大的網卡流量(帶寬)等。
總之對MySQL性能的提高,是經過各個方面來提高的,每一個方面都提高一點,總體加起來就有明顯的提高。
總之對MySQL性能的提高,是經過各個方面來提高的,每一個方面都提高一點,總體加起來就有明顯的提高。