袁崢 鐘新林 許鼎
摘 要:隨著互聯(lián)網(wǎng)的發(fā)展,越來越多人或中小型公司開發(fā)時選用MySQL做持久化存儲,所以對MySQL有大概的了解是十分有必要的。
關鍵詞:MySQL;數(shù)據(jù)庫;安全;優(yōu)化;
在寫Mysql前,需要先對數(shù)據(jù)庫有一定的了解,數(shù)據(jù)庫是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立的數(shù)據(jù)集合,可視為電子化的文件柜——存儲電子文件的處所,用戶可以對文件中的數(shù)據(jù)進行新增、查詢、更新、刪除等操作。隨著時代的發(fā)展,大數(shù)據(jù)的到來,出現(xiàn)了非關系型數(shù)據(jù)庫NoSQL(Not only SQL),傳統(tǒng)的關系型數(shù)據(jù)庫如Mysql等依然保持著強大的生命力。兩種數(shù)據(jù)庫在存儲方式、存儲結構、存儲規(guī)范等方面都有區(qū)別,應該按照存儲數(shù)據(jù)的數(shù)量,并發(fā)量、性能來選擇合適的數(shù)據(jù)庫。
一、優(yōu)化
MySQL的安裝和使用難度不大,網(wǎng)上教程繁多,MySQL語句簡單易懂,但是數(shù)據(jù)庫表和SQL語句的設計影響著數(shù)對據(jù)庫的操作性能,分鐘級別的響應經(jīng)過表和語句的優(yōu)化可降到毫秒級別,主要的優(yōu)化手段有加索引、分表、SQL語句優(yōu)化等,這些方法一般都是采用存儲空間換相應速度或者反過來,所以設計數(shù)據(jù)庫時需要根據(jù)實際所需。
二、優(yōu)點
MySQL的優(yōu)點主要表現(xiàn)在性能的卓越穩(wěn)定,較少出現(xiàn)異常宕機的情況,源代碼的開源和免費,因此使用起來費用成本低。MySQL社區(qū)的活躍,sql語句的簡單使得學習門檻低。軟件體積,安裝簡單,易于維護,因此運維成本低。使用C和C++編寫,并使用多種編譯器進行測試,保證源代碼的可移植性,可部署多種操作系統(tǒng),API接口豐富,支持多種開發(fā)語言,存儲引擎豐富。
三、缺點
MySQL的安全性不如收費數(shù)據(jù)庫的安全性高,但由于MySQL代碼開源,許多公司會對MySQL底層做相關的優(yōu)化。Mysql不支持熱備份,當發(fā)生故障時,對數(shù)據(jù)庫回復時間點有限制,MySQL也不支持自定義數(shù)據(jù)類型、對XML支持不夠良好、對存儲過程和觸發(fā)器支持不夠良好等,但是都有相應的優(yōu)化方案,依然不減MySQL受歡迎程度。
四、索引詳解
索引使用的是否恰當直接影響到了MySQL性能,所以對索引有一定認識是非常重要的。什么是索引?為什么要建立索引?索引用于快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數(shù)據(jù)所花費的時間就越多,如果表中查詢的列有一個索引,MySQL能夠快速到達一個位置去搜索數(shù)據(jù)文件,而不必查看所有數(shù)據(jù),那么將會節(jié)省很大一部分時間。例如:有一張person表,其中有2萬條記錄,記錄著2萬個人的信息。有一個Phone的字段記錄每個人的電話號碼,現(xiàn)在想要查詢出電話號碼為xxxx的人的信息。如果沒有索引,那么將從表中第一條記錄一條條往下遍歷,直到找到該條信息為止。如果有了索引,那么會將該Phone字段,通過一定的方法進行存儲,好讓查詢該字段上的信息時,能夠快速找到對應的數(shù)據(jù),而不必在遍歷2萬條數(shù)據(jù)了。其中MySQL中的索引的存儲類型有兩種:BTREE、HASH。也就是用樹或者Hash值來存儲該字段,索引的工作原理要理解MySQL中索引的工作原理,最簡單的方法就是去看一看一本書的索引部分:比如你想在一本書中尋找某個主題,一般會先看書的索引目錄,找到對應的章節(jié)、對應的頁碼后就可以快速找到你想看的內容。在MySQL中,存儲引擎用類似的方法使用索引,其先在索引中查找對應的值,然后根據(jù)匹配的索引記錄找到對應的數(shù)據(jù)行,最后將數(shù)據(jù)結果集返回給客戶端。因此使用索引的優(yōu)點是所有的MySql列類型(字段類型)都可以被索引,也就是可以給任意字段設置索引、大大加快數(shù)據(jù)的查詢速度。但缺點是創(chuàng)建索引和維護索引要耗費時間,并且隨著數(shù)據(jù)量的增加所耗費的時間也會增加,索引也需要占空間,我們知道數(shù)據(jù)表中的數(shù)據(jù)也會有最大上線設置的,如果我們有大量的索引,索引文件可能會比數(shù)據(jù)文件更快達到上線值,當對表中的數(shù)據(jù)進行增加、刪除、修改時,索引也需要動態(tài)的維護,降低了數(shù)據(jù)的維護速度。所以應遵守一定的使用原則比如通過上面說的優(yōu)點和缺點,我們應該可以知道,并不是每個字段度設置索引就好,也不是索引越多越好,而是需要自己合理的使用,對經(jīng)常更新的表就避免對其進行過多的索引,對經(jīng)常用于查詢的字段應該創(chuàng)建索引,數(shù)據(jù)量小的表最好不要使用索引,因為由于數(shù)據(jù)較少,可能查詢全部數(shù)據(jù)花費的時間比遍歷索引的時間還要短,索引就可能不會產(chǎn)生優(yōu)化效果,在一同值少的列上(字段上)不要建立索引,比如在學生表的"性別"字段上只有男,女兩個不同值。相反的,在一個字段上不同值較多可以建立索引。索引是在存儲引擎中實現(xiàn)的,也就是說不同的存儲引擎,會使用不同的索引,MyISAM和InnoDB存儲引擎:只支持BTREE索引,也就是說默認使用BTREE,不能夠更換MEMORY/HEAP存儲引擎:支持HASH和BTREE索引,索引我們分為四類來講有單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引。
五、總結
數(shù)據(jù)庫設計的質量會直接影響到軟件開發(fā)的進度和質量,由上述總結出MySQL成本低、性能強,以開發(fā)文檔、社區(qū)論壇、源代碼為基礎上做數(shù)據(jù)庫開發(fā)便可滿足絕大多數(shù)需求并容易對遇到的問題找到解決方案。