mysql 優化系列(一) Mysql數據庫引擎性能測試 mysql
Mysql 數據庫中,最經常使用的兩種引擎是innordb和myisam。Innordb的功能要比myiasm強大不少,可是innordb的性能要比myisam差不少,若是你的網站只是作簡單的查詢,更新,刪除,那麼用myiasm是最好的選擇。sql
全部的性能測試在:Micrisoft window xp sp2 , Intel(R) Pentinum(R) M processor 1.6oGHz 1G 內存的電腦上測試。數據庫
測試結果:緩存
測試方法:連續提交10個query, 表記錄總數: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
結論:安全
1. 加了索引之後,對於Myisam查詢能夠加快:4 206.09733倍,對innordb 查詢加快510.72921倍。同時對myisam更新速度減慢爲原來的1/2,innordb的更新速度減慢爲原來的1/30。你們要看狀況決定是否要加索引,好比不查詢的log表,不要作任何的索引。
2. 若是你的數據量是百萬級別的,而且沒有任何的事務處理,那麼用myisam是性能最好的選擇。
3. Innordb的表的大小更加的大,用myisam能夠省不少的硬盤空間。性能優化
在咱們測試的這個38w的表中,表佔用空間的狀況以下:
引擎類型 MyIsam InnorDB
數據 53,924 KB 58,976 KB
索引 13,640 KB 21,072 KB
佔用總空間 67,564 KB 80,048 KB
另一個176W萬記錄的表, 表佔用空間的狀況以下:服務器
引擎類型 MyIsam InnorDB
數據 56,166 KB 90,736 KB
索引 67,103 KB 88,848 KB
佔用總空間 123,269 KB 179,584 KB數據結構
MyIsam引擎和InnorDB引擎簡介:併發
MyISAMide
MyISAM是MySQL的ISAM擴展格式和缺省的數據庫引擎。除了提供ISAM裏所沒有的索引和字段管理的大量功能,MyISAM還使用一種表格鎖定的機制,來優化多個併發的讀寫操做。其代價是你須要常常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間(學過數據結構的都應該知道,ISAM文件格式的缺陷)。MyISAM還有一些有用的擴展,例如用來修復數據庫文件的MyISAMChk工具和用來恢復浪費空間的MyISAMPack工具。
MyISAM強調了快速讀取操做,這可能就是爲何MySQL受到了Web開發如此青睞的主要緣由:在Web開發中你所進行的大量數據操做都是讀取操做。因此,大多數虛擬主機提供商和Internet平臺提供商(Internet Presence Provider,IPP)只容許使用MyISAM格式。 MYISAM格式的一個重要缺陷就是不能在表損壞後恢復數據。
InnorDB
InnoDB數據庫引擎都是造就MySQL靈活性的技術的直接產品,這項技術就是MySQL++ API。在使用MySQL的時候,你所面對的每個挑戰幾乎都源於ISAM和MyISAM數據庫引擎不支持事務處理也不支持外來鍵。儘管要比ISAM和 MyISAM引擎慢不少,可是InnoDB包括了對事務處理和外鍵的支持,這兩點都是前兩個引擎所沒有的。如前所述,若是你的設計須要這些特性中的一者或者二者,那你就要被迫使用後兩個引擎中的一個了。
Mysql 官方對InnorDB是這樣解釋的:
InnoDB給MySQL提供了具備提交,回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。InnoDB鎖定在行級而且也在SELECT語句提供一個Oracle風格一致的非鎖定讀。這些特點增長了多用戶部署和性能。沒有在InnoDB中擴大鎖定的須要,由於在InnoDB中行級鎖定適合很是小的空間。InnoDB也支持FOREIGN KEY強制。在SQL查詢中,你能夠自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個查詢中也能夠混合。
InnoDB是爲處理巨大數據量時的最大性能設計。它的CPU效率多是任何其它基於磁盤的關係數據庫引擎所不能匹敵的。
InnoDB存儲引擎被徹底與MySQL服務器整合,InnoDB存儲引擎爲在主內存中緩存數據和索引而維持它本身的緩衝池。InnoDB存儲它的表&索引在一個表空間中,表空間能夠包含數個文件(或原始磁盤分區)。這與MyISAM表不一樣,好比在MyISAM表中每一個表被存在分離的文件中。InnoDB 表能夠是任何尺寸,即便在文件尺寸被限制爲2GB的操做系統上。
InnoDB默認地被包含在MySQL二進制分發中。Windows Essentials installer使InnoDB成爲Windows上MySQL的默認表。
InnoDB被用來在衆多須要高性能的大型數據庫站點上產生。著名的Internet新聞站點Slashdot.org運行在InnoDB上。 Mytrix, Inc.在InnoDB上存儲超過1TB的數據,還有一些其它站點在InnoDB上處理平均每秒800次插入/更新的
mysql 性能優化(二)
今天忽然看到一年前寫的 mysql 優化(一) ,感受有些誤人子弟。今天再補充一些東西。
關於引擎選擇,從理論上 和 實際上 可能會有差距,因此,對待mysql 要有實驗精神。
通常來講,
MYisam 適合:
1. 作不少count 的計算。
2. 插入不平凡,查詢很是頻繁。
3. 沒有事務
innordb 很是適合:
1. 可靠性要求比較高,或者要求事務。
2. 表更新和查詢都至關的頻繁,而且表鎖定的機會比較大的狀況。
固然這也不是絕對的。要試驗過才知道。 不少時候,性能瓶頸不是由於服務器配置很差,而是由於SQL不是很好。SQL的性能優化是關鍵。 除了這些常見的優化方法, 還能夠考慮 使用內存表。你測試一張myisam 和 內存表,會發現速度差很少。 其實,在併發比較強的時候,性能會相差大概五倍。我有張常常要查詢的IP 地址 和 地區的 對應表,放入內存後。 之前查詢 5000個 IP 地址大概 要 15S, 如今,只要 2S多。 不少東西,實際測試過才知道。用什麼壓力測試,測試出來的也不是很準確。