1、配置優化
配置的優化其實包含兩個方面的:操作系統內核的優化和mysql配置文件的優化
1)系統內核的優化對專用的mysql服務器來說,無非是內存實用、連接數、超時處理、TCP處理等方面的優化,根據自己的硬件配置來進行優化,這里不多講;
2)mysql配置的優化,一般來說包含:IO處理的常用參數、最大連接數設置、緩存使用參數的設置、慢日志的參數的設置、innodb相關參數的設置等,如果有主從關系在設置主從同步的相關參數即可,網上的相關配置文件很多,大同小異,常用的設置大多修改這些差不多就夠用了。
2、sql語句的優化
1、 盡量稍作計算
Mysql的作用是用來存取數據的,不是做計算的,做計算的話可以用其他方法去實現,mysql做計算是很耗資源的。
2.盡量少 join
MySQL 的優勢在于簡單,但這在某些方面其實也是其劣勢。MySQL 優化器效率高,但是由于其統計信息的量有限,優化器工作過程出現偏差的可能性也就更多。對于復雜的多表 Join,一方面由于其優化器受限,再者在 Join 這方面所下的功夫還不夠,所以性能表現離 Oracle 等關系型數據庫前輩還是有一定距離。但如果是簡單的單表查詢,這一差距就會極小甚至在有些場景下要優于這些數據庫前輩。
3.盡量少排序
排序操作會消耗較多的 CPU 資源,所以減少排序可以在緩存命中率高等 IO 能力足夠的場景下會較大影響 SQL的響應時間。
對于MySQL來說,減少排序有多種辦法,比如:
通過利用索引來排序的方式進行優化。
減少參與排序的記錄條數。
非必要不對數據進行排序。
設計數據庫要滿足三大范式:第一范式:
1、內容相似的數據列必須消除(消除的辦法就是再創建一個數據表來存放他們,建立關聯關系)。
2、必須為每一組相關數據分別創建一個表。
3、每條數據記錄必須用一個主鍵來標示。
第二范式:
1、只要數據列里面的內容出現重復,就意味著應該把表拆分為多個表。
2、拆分形成的表必須用外鍵關聯起來。
第三范式:
1、與主鍵沒有直接關系的數據列必須消除(消除的辦法就是再創建一個表來存放他們)。