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