性能優(yōu)化
表的設(shè)計(jì)合理化,符合三大范式(3NF)
1NF是對(duì)屬性的原子性約束,要求屬性(列)具有原子性,不可再分解;(只要是關(guān)系型數(shù)據(jù)庫都滿足1NF)
2NF是對(duì)記錄的惟一性約束,要求記錄有惟一標(biāo)識(shí),即實(shí)體的惟一性;
3NF是對(duì)字段冗余性的約束,它要求字段沒有冗余。 沒有冗余的數(shù)據(jù)庫設(shè)計(jì)可以做到。
添加適當(dāng)索引(index) [四種: 普通索引、主鍵索引、唯一索引unique、全文索引]
較頻繁的作為查詢條件字段應(yīng)該創(chuàng)建索引;
唯一性太差的字段不適合單獨(dú)創(chuàng)建索引,即使頻繁作為查詢條件;
更新非常頻繁的字段不適合創(chuàng)建索引
不會(huì)出現(xiàn)在WHERE子句中的字段不該創(chuàng)建索引
分表技術(shù)(水平分割、垂直分割);
讀寫[寫: update/delete/add]分離;
存儲(chǔ)過程 [模塊化編程,可以提高速度];
對(duì)mysql配置優(yōu)化 [配置最大并發(fā)數(shù)my.ini, 調(diào)整緩存大小 ];
mysql服務(wù)器硬件升級(jí);
定時(shí)的去清除不需要的數(shù)據(jù),定時(shí)進(jìn)行碎片整理(MyISAM)。
SQL語句優(yōu)化
通過show status命令了解各種SQL的執(zhí)行頻率;
定位執(zhí)行效率較低的SQL語句-(重點(diǎn)select;
通過explain分析低效率的SQL;
確定問題并采取相應(yīng)的優(yōu)化措施。
添加索引
索引主要可以分為以下幾種:
主鍵索引,主鍵自動(dòng)的為主索引 (類型Primary);
唯一索引 (UNIQUE);
普通索引 (INDEX);
全文索引 (FULLTEXT) [適用于MyISAM] ——》sphinx + 中文分詞 coreseek [sphinx 的中文版 ];
綜合使用=>復(fù)合索引
可能使用到索引
對(duì)于創(chuàng)建的多列索引,只要查詢條件使用了最左邊的列,索引一般就會(huì)被使用。
對(duì)于使用like的查詢,查詢?nèi)绻?‘%aaa’ 不會(huì)使用到索引, ‘a(chǎn)aa%’ 會(huì)使用到索引。
不使用索引
如果條件中有or,即使其中有條件帶索引也不會(huì)使用。
對(duì)于多列索引,不是使用的第一部分,則不會(huì)使用索引。
like查詢是以%開頭
如果列類型是字符串,那一定要在條件中將數(shù)據(jù)使用引號(hào)引用起來。否則不使用索引。(添加時(shí),字符串必須’’)
如果mysql估計(jì)使用全表掃描要比使用索引快,則不使用索引。