Mysql 數(shù)據(jù)庫中,最常用的兩種引擎是innordb和myisam。Innordb的功能要比myiasm強大很多,但是innordb的性能要比myisam差很多,如果你的網(wǎng)站只是做簡單的查詢,更新,刪除,那么用myiasm是最好的選擇。
所有的性能測試在:Micrisoft window xp sp2 , Intel(R) Pentinum(R) M processor 1.6oGHz 1G 內(nèi)存的電腦上測試。
測試結(jié)果:
測試方法:連續(xù)提交10個query, 表記錄總數(shù):38萬 , 時間單位 s
引擎類型 Myisam innordb 性能相差
count 0.0008357 3.0163 3609
查詢主鍵 0.005708 0.1574 27.57
查詢非主鍵 24.01 80.37 3.348
更新主鍵 0.008124 0.8183 100.7
更新非主鍵 0.004141 0.02625 6.338
插入 0.004188 0.3694 88.21
結(jié)論:
1. 加了索引以后,對于Myisam查詢可以加快:4 206.09733倍,對innordb 查詢加快510.72921倍。同時對myisam更新速度減慢為原來的1/2,innordb的更新速度減慢為原來的1/30。大家要看情況決定是否要加索引,比如不查詢的log表,不要做任何的索引。
2. 如果你的數(shù)據(jù)量是百萬級別的,并且沒有任何的事務處理,那么用myisam是性能最好的選擇。
3. Innordb的表的大小更加的大,用myisam可以省很多的硬盤空間。
在我們測試的這個38w的表中,表占用空間的情況如下:
引擎類型 MyIsam InnorDB
數(shù)據(jù) 53,924 KB 58,976 KB
索引 13,640 KB 21,072 KB
占用總空間 67,564 KB 80,048 KB
另外一個176W萬記錄的表, 表占用空間的情況如下:
引擎類型 MyIsam InnorDB
數(shù)據(jù) 56,166 KB 90,736 KB
索引 67,103 KB 88,848 KB
占用總空間 123,269 KB 179,584 KB
MyIsam引擎和InnorDB引擎簡介:
MyISAM
MyISAM是MySQL的ISAM擴展格式和缺省的數(shù)據(jù)庫引擎。除了提供ISAM里所沒有的索引和字段管理的大量功能,MyISAM還使用一種表格鎖定的機制,來優(yōu)化多個并發(fā)的讀寫操作。其代價是你需要經(jīng)常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間(學過數(shù)據(jù)結(jié)構(gòu)的都應該知道,ISAM文件格式的缺陷)。MyISAM還有一些有用的擴展,例如用來修復數(shù)據(jù)庫文件的MyISAMChk工具和用來恢復浪費空間的MyISAMPack工具。
MyISAM強調(diào)了快速讀取操作,這可能就是為什么MySQL受到了Web開發(fā)如此青睞的主要原因:在Web開發(fā)中你所進行的大量數(shù)據(jù)操作都是讀取操作。所以,大多數(shù)虛擬主機提供商和Internet平臺提供商(Internet Presence Provider,IPP)只允許使用MyISAM格式。 MYISAM格式的一個重要缺陷就是不能在表損壞后恢復數(shù)據(jù)。
InnorDB
InnoDB數(shù)據(jù)庫引擎都是造就MySQL靈活性的技術(shù)的直接產(chǎn)品,這項技術(shù)就是MySQL++ API。在使用MySQL的時候,你所面對的每一個挑戰(zhàn)幾乎都源于ISAM和MyISAM數(shù)據(jù)庫引擎不支持事務處理也不支持外來鍵。盡管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了對事務處理和外鍵的支持,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的一者或者兩者,那你就要被迫使用后兩個引擎中的一個了。
Mysql 官方對InnorDB是這樣解釋的:
InnoDB給MySQL提供了具有提交,回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。InnoDB鎖定在行級并且也在SELECT語句提供一個Oracle風格一致的非鎖定讀。這些特色增加了多用戶部署和性能。沒有在InnoDB中擴大鎖定的需要,因為在InnoDB中行級鎖定適合非常小的空間。InnoDB也支持FOREIGN KEY強制。在SQL查詢中,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個查詢中也可以混合。
InnoDB是為處理巨大數(shù)據(jù)量時的大性能設計。它的CPU效率可能是任何其它基于磁盤的關(guān)系數(shù)據(jù)庫引擎所不能匹敵的。
InnoDB存儲引擎被完全與MySQL服務器整合,InnoDB存儲引擎為在主內(nèi)存中緩存數(shù)據(jù)和索引而維持它自己的緩沖池。InnoDB存儲它的表&索引在一個表空間中,表空間可以包含數(shù)個文件(或原始磁盤分區(qū))。這與MyISAM表不同,比如在MyISAM表中每個表被存在分離的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統(tǒng)上。
InnoDB默認地被包含在MySQL二進制分發(fā)中。Windows Essentials installer使InnoDB成為Windows上MySQL的默認表。
InnoDB被用來在眾多需要高性能的大型數(shù)據(jù)庫站點上產(chǎn)生。著名的Internet新聞站點Slashdot.org運行在InnoDB上。 Mytrix, Inc.在InnoDB上存儲超過1TB的數(shù)據(jù),還有一些其它站點在InnoDB上處理平均每秒800次插入/更新的
mysql 性能優(yōu)化(二)
今天突然看到一年前寫的 mysql 優(yōu)化(一) ,感覺有些誤人子弟。今天再補充一些東西。
關(guān)于引擎選擇,從理論上 和 實際上 可能會有差距,所以,對待mysql 要有實驗精神。
一般來說,
MYisam 適合:
1. 做很多count 的計算。
2. 插入不平凡,查詢非常頻繁。
3. 沒有事務
innordb 非常適合:
1. 可靠性要求比較高,或者要求事務。
2. 表更新和查詢都相當?shù)念l繁,并且表鎖定的機會比較大的情況。
當然這也不是絕對的。要試驗過才知道。
很多時候,性能瓶頸不是因為服務器配置不好,而是因為SQL不是很好。SQL的性能優(yōu)化是關(guān)鍵。
除了這些常見的優(yōu)化方法,
還可以考慮 使用內(nèi)存表。你測試一張myisam 和 內(nèi)存表,會發(fā)現(xiàn)速度差不多。
其實,在并發(fā)比較強的時候,性能會相差大概五倍。我有張經(jīng)常要查詢的IP 地址 和 地區(qū)的 對應表,放入內(nèi)存后。
以前查詢 5000個 IP 地址大概 要 15S, 現(xiàn)在,只要 2S多。
很多東西,實際測試過才知道。用什么壓力測試,測試出來的也不是很準確。
王安琪,英文名Angel,南京郵電大學計算機應用技術(shù)碩士學位。 熟悉Java、C#編程語言。專注于WebService、海量數(shù)據(jù)處理、搜索引擎技術(shù)、消息中間件技術(shù)、分布式文件存儲、.NET應用程序開發(fā)、系統(tǒng)架構(gòu)設計。主要從事大數(shù)據(jù)管理系統(tǒng)的研發(fā),項目經(jīng)理,系統(tǒng)架構(gòu)師,就職于江蘇金陵科技集團有限公司。
Email:aitanjupt@hotmail.com
QQ:289770363
當前標題:(轉(zhuǎn))mysql數(shù)據(jù)庫引擎:MyISAM和InnoDB(性能優(yōu)化)-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://jinyejixie.com/article10/dpcedo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機、網(wǎng)站導航、網(wǎng)站設計公司、定制網(wǎng)站、品牌網(wǎng)站設計、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容