mysql優(yōu)化
-
1.優(yōu)化索引、SQL語句、分析慢查詢;
-
2.設(shè)計(jì)表的時(shí)候嚴(yán)格按照數(shù)據(jù)庫的設(shè)計(jì)范式來設(shè)計(jì)數(shù)據(jù)庫;
-
4.不用全文索引,使用Xunsearch,ES或者云服務(wù)器上的索引;
-
5.如果效率還是不夠好,可以采用主從方式將數(shù)據(jù)讀寫分離;
-
6.可以加上memcached緩存,將經(jīng)常被訪問到但不經(jīng)常變化的數(shù)據(jù)放至memcached緩存服務(wù)器里面,這樣的話能夠節(jié)約磁盤I/O;
-
7.還可以優(yōu)化硬件,在硬件層面,我們可以使用更好的一些硬盤(固態(tài)硬盤),使用一些磁盤陣列技術(shù)(raid0,raid1,raid5)
? ? – raid0:最簡(jiǎn)單的(兩塊硬件相加100G+100G=200G)
? ? – raid1:鏡像卷,把同樣的數(shù)據(jù)下兩份。可以隨即從A/B里面讀取,效率更高,硬盤壞了一塊數(shù)據(jù)也不會(huì)丟失;
? ? – raid5:3塊硬盤,壞了一塊,另外兩塊也能工作。 -
8.如果還是慢,先不要切分表,可以使用MySQL內(nèi)部自帶的表分區(qū)技術(shù),將數(shù)據(jù)分成不同的文件,這樣能夠讓磁盤在讀取的時(shí)候效率更高;
-
9.可以做垂直分表,將不經(jīng)常用讀的數(shù)據(jù)放到另外一個(gè)表里去(節(jié)約磁盤I/O);
-
10.數(shù)據(jù)量特別大,我們優(yōu)化起來會(huì)很困難,這時(shí)可以使用數(shù)據(jù)庫中間件的方式,將數(shù)據(jù)進(jìn)行分庫分表分機(jī)器。(原理:數(shù)據(jù)路由);
-
11.此外,還可以采用一些更快的存儲(chǔ)方式,例如nosql存儲(chǔ)一些我們需要經(jīng)常訪問到的數(shù)據(jù)(數(shù)據(jù)庫取出來后,再到NoSQL中取出一些其他數(shù)據(jù));
-
12.此外還有一些表引擎選擇,參數(shù)優(yōu)化還有些相關(guān)的小技巧都是優(yōu)化MySQL的方式;
慢查詢:指超過指定時(shí)間的SQL語句查詢,分析MySQL語句查詢性能的方法除了使explain輸出執(zhí)行計(jì)劃,還可以讓MySQL記錄下查詢超過指定時(shí)間的語句。
Xunsearch:免費(fèi)開源的專業(yè)全文檢索解決方案,旨在幫助一般開發(fā)者針對(duì)既有的海量數(shù)據(jù)快速而方便地建立自己的全文搜索引擎。全文檢索可以幫助降低服務(wù)器的搜索負(fù)荷、極大程度的提高搜索速度和用戶體驗(yàn)。
elasticsearch:一個(gè)基于lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于restful web接口。
表引擎 | 優(yōu)點(diǎn) | 不足 |
---|---|---|
ISAM | 讀取速度快,且不占用大量?jī)?nèi)存和存儲(chǔ)資源 | 不支持事務(wù),不能容錯(cuò);如果硬盤崩潰了,數(shù)據(jù)文件就無法恢復(fù)(常備份) |
MYISAM | ISAM擴(kuò)展格式和缺省數(shù)據(jù)引擎,提供了ISAM里所沒有的索引和字段管理的大量功能,MYISAM使用表鎖 | 不支持事務(wù),不支持外鍵 |
INNODB和BERKLEY(BDB) | 支持事務(wù),支持外鍵 | 數(shù)據(jù)讀取較慢 |
HEAP | 允許只駐留在內(nèi)存里的臨時(shí)表格,因此比ISAM和MYISAM都快 | 管理的數(shù)據(jù)都是不穩(wěn)定的,如果在關(guān)機(jī)前數(shù)據(jù)沒保存,那么所有的數(shù)據(jù)都會(huì)丟失(表格用完之后就刪除表格);需要select表達(dá)式來選擇和操控?cái)?shù)據(jù)時(shí)非常有用 |
范式 | 特點(diǎn) |
---|---|
第一范式(1NF) | 具有原子性,即列的信息不可再分【列唯一】 |
第二范式(2NF) | 以第一范式為基礎(chǔ),數(shù)據(jù)表的每一個(gè)實(shí)例或者行,必須要唯一的區(qū)分(每行上建主鍵)【行唯一】 |
第三范式(3NF) | 基于第二范式,一個(gè)數(shù)據(jù)庫,不包含已在其他表中的非主鍵列 |