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