MySQL優(yōu)化通常有幾種方式:
- 表的設(shè)計合理化(符合3NF)
- 添加適當(dāng)索引(index) [四種: 普通索引惊窖、主鍵索引、唯一索引unique纺非、全文索引]
- SQL語句優(yōu)化
- 分表技術(shù)(水平分割坏怪、垂直分割)
- 讀寫[寫: update/delete/add]分離
- 存儲過程 [模塊化編程,可以提高速度]
- 對mysql配置優(yōu)化 [配置最大并發(fā)數(shù)my.ini, 調(diào)整緩存大小 ]
- mysql服務(wù)器硬件升級
- 定時的去清除不需要的數(shù)據(jù),定時進行碎片整理(MyISAM)
數(shù)據(jù)庫的設(shè)計
什么是數(shù)據(jù)庫范式
為了建立冗余較小奠伪、結(jié)構(gòu)合理的數(shù)據(jù)庫,設(shè)計數(shù)據(jù)庫時必須遵循一定的規(guī)則首懈。在關(guān)系型數(shù)據(jù)庫中這種規(guī)則就稱為范式绊率。范式是符合某一種設(shè)計要求的總結(jié)。要想設(shè)計一個結(jié)構(gòu)合理的關(guān)系型數(shù)據(jù)庫究履,必須滿足一定的范式滤否。
數(shù)據(jù)庫三大范式
第一范式:1NF是對屬性的原子性約束,要求屬性(列)具有原子性最仑,不可再分解藐俺;(只要是關(guān)系型數(shù)據(jù)庫都滿足1NF)
第二范式:2NF是對記錄的惟一性約束,表中的記錄是唯一的, 就滿足2NF, 通常我們設(shè)計一個主鍵來實現(xiàn)泥彤,主鍵不能包含業(yè)務(wù)邏輯欲芹。
第三范式:3NF是對字段冗余性的約束,它要求字段沒有冗余吟吝。 沒有冗余的數(shù)據(jù)庫設(shè)計可以做到耀石。
但是,沒有冗余的數(shù)據(jù)庫未必是最好的數(shù)據(jù)庫爸黄,有時為了提高運行效率,就必須降低范式標(biāo)準(zhǔn)揭鳞,適當(dāng)保留冗余數(shù)據(jù)炕贵。
具體做法是: 在概念數(shù)據(jù)模型設(shè)計時遵守第三范式,降低范式標(biāo)準(zhǔn)的工作放到物理數(shù)據(jù)模型設(shè)計時考慮野崇。降低范式就是增加字段称开,允許冗余。
SQL優(yōu)化
如何從一個大項目中,迅速的定位執(zhí)行速度慢的語句. (定位慢查詢)
show status
使用show status使用show status查看MySQL服務(wù)器狀態(tài)信息
常用命令
--mysql數(shù)據(jù)庫啟動了多少時間
show status like 'uptime';
show stauts like 'com_select'
show stauts like 'com_insert' ...類推 update delete(顯示數(shù)據(jù)庫的查詢鳖轰,更新清酥,添加,刪除的次數(shù))
show [session|global] status like .... 如果你不寫 [session|global] 默認(rèn)是session 會話蕴侣,指取出當(dāng)前窗口的執(zhí)行焰轻,如果你想看所有(從mysql 啟動到現(xiàn)在,則應(yīng)該 global)
//顯示到mysql數(shù)據(jù)庫的連接數(shù)
show status like 'connections ';
//顯示慢查詢次數(shù)
show status like 'slow_queries';
慢查詢
什么是慢查詢
MySQL默認(rèn)10秒內(nèi)沒有響應(yīng)SQL結(jié)果,則為慢查詢昆雀。
可以去修改MySQL慢查詢默認(rèn)時間
如何修改慢查詢
查詢SQL
--查詢慢查詢時間
show variables like 'long_query_time';
--修改慢查詢時間
set long_query_time=1; ---但是重啟mysql之后辱志,long_query_time依然是my.ini中的值
未完待續(xù)...