mysql資料庫引擎 MyISAM和InnoDB

2021-06-20 02:20:41 字數 3707 閱讀 4927

mysql 優化系列(一) mysql資料庫引擎效能測試 

mysql 資料庫中,最常用的兩種引擎是innordb和myisam。innordb的功能要比myiasm強大很多,但是innordb的效能要比myisam差很多,如果你的**只是做簡單的查詢,更新,刪除,那麼用myiasm是最好的選擇。

所有的效能測試在: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引擎簡介:

myisam

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多。

很多東西,實際測試過才知道。用什麼壓力測試,測試出來的也不是很準確。

MySQL資料庫InnoDB與MyISAM區別

特點 行級鎖,支援事務處理,支援外來鍵,行鎖實現,根據索引條件檢索資料使用行鎖。表鎖,支援全文索引。表鎖,分為表共享鎖和表獨佔鎖。讀和讀之間使用共享鎖,讀寫之間使用獨佔鎖。b樹,又稱多路平衡查詢樹。所有節點中孩子節點的最大值為此樹的階 用m表示 每個節點關鍵字的個數最少有 m 2 1 個,最多有 m...

mysql資料庫引擎 mysql資料庫引擎

資料庫引擎是用於儲存 處理和保護資料的核心服務。利用資料庫引擎可控制訪問許可權並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。使用資料庫引擎建立用於聯機事務處理或聯機分析處理資料的關聯式資料庫。這包括建立用於儲存資料的表和用於檢視 管理和保護資料安全的資料庫物件 如索引 檢視和...

mysql的innodb引擎和myisam引擎區別

首先innodb支援事務,可以進行事務的回滾,而myisam不支援事務 所以在更新比較多或者插入比較多的時候使用innodb 再者就是innodb支援的是行級鎖定 某些情況下會表級,例如出現以 開頭的模糊查詢 myisam支援的表級鎖定 表級鎖定和行級鎖定就從字面理解 即在進行表內資料的操作時,my...