mysql 引擎優化

2021-09-01 16:49:36 字數 3799 閱讀 5401

mysql數 據庫引擎取決於mysql在安裝的時候是如何被編譯的。要新增乙個新的引擎,就必須重新編譯mysql。在預設情況下,mysql支援三個引擎:isam、myisam和heap。另外兩種型別innodb和berkley(bdb),也常常可以使用。如果技術高超,還可以使用mysql++ api自己做乙個引擎。下面介紹幾種資料庫引擎:

isam:isam是乙個定義明確且歷經時間考驗的資料**管理方法,它在設計之時就考慮到 資料庫被查詢的次數要遠大於更新的次數。因此,isam執行讀取操作的速度很快,而且不占用大量的記憶體和儲存資源。isam的兩個主要不足之處在於,它不 支援事務處理,也不能夠容錯:如果你的硬碟崩潰了,那麼資料檔案就無法恢復了。如果你正在把isam用在關鍵任務應用程式裡,那就必須經常備份你所有的實 時資料,通過其複製特性,mysql能夠支援這樣的備份應用程式。

myisam:myisam是mysql的isam擴充套件格式和預設的資料庫引擎。除了提供isam裡所沒有的索引和字段管理的大量功能,myisam還使用一種**鎖定的機制,來優化多個併發的讀寫操作,其代價是你需要經常執行optimize table命令,來恢復被更新機制所浪費的空間。myisam還有一些有用的擴充套件,例如用來修復資料庫檔案的myisamchk工具和用來恢復浪費空間的 myisampack工具。myisam強調了快速讀取操作,這可能就是為什麼mysql受到了web開發如此青睞的主要原因:在web開發中你所進行的大量資料操作都是讀取操作。所以,大多數虛擬主機提供商和internet平台提供商只允許使用myisam格式。myisam格式的乙個重要缺陷就是不能在表損壞後恢復資料。

heap:heap允許只駐留在記憶體裡的臨時**。駐留在記憶體裡讓heap要比isam和myisam都快,但是它所管理的資料是不穩定的,而且如果在關機之前沒有進行儲存,那麼所有的資料都會丟失。在資料行被刪除的時候,heap也不會浪費大量的空間。heap**在你需要使用select表示式來選擇和操控資料的時候非常有用。要記住,在用完**之後就刪除**。

innodb:innodb資料庫引擎都是造就mysql靈活性的技術的直接產品,這項技術就是mysql++ api。在使用mysql的時候,你所面對的每乙個挑戰幾乎都源於isam和myisam資料庫引擎不支援事務處理(transaction process)也不支援外來鍵。儘管要比isam和 myisam引擎慢很多,但是innodb包括了對事務處理和外來鍵的支援,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的一者 或者兩者,那你就要被迫使用後兩個引擎中的乙個了。

mysql 官方對innodb是這樣解釋的: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次插入/更新的

一般來說,myisam適合:(1)做很多count 的計算;(2)插入不頻繁,查詢非常頻繁;(3)沒有事務。innodb適合:(1)可靠性要求比較高,或者要求事務;(2)表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況。

一般情況下,mysql會預設提供多種儲存引擎,可以通過下面的檢視:

(1)看你的mysql現在已提供什麼儲存引擎: mysql> show engines;

(2)看你的mysql當前預設的儲存引擎: mysql> show variables like '%storage_engine%';

(3)你要看某個錶用了什麼引擎(在顯示結果裡引數engine後面的就表示該錶當前用的儲存引擎): mysql> show create table 表名;

所有的效能測試在:micrisoft window xp sp2 , intel(r) pentinum(r) m processor 1.6oghz 1g 記憶體的電腦上測試。

測試方法:連續提交10個query, 表記錄總數:38萬 , 時間單位 s

引擎型別 myisam innodb 效能相差

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倍,對innodb查詢加快510.72921倍,同時對myisam更新速度減慢為原來的1/2,innodb的更新速度減慢為原來的1/30。要看情況決定是否要加索引,比如不查詢的log表,不要做任何的索引。

(2)如果你的資料量是百萬級別的,並且沒有任何的事務處理,那麼用myisam是效能最好的選擇。

(3)innodb表的大小更加的大,用myisam可省很多的硬碟空間。

在我們測試的這個38w的表中,表占用空間的情況如下:

引擎型別 myisam innodb

資料 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

mysql優化系列 InnoDB引擎優化

innodb維護乙個稱為緩衝池的記憶體儲存區域 用於快取記憶體中的資料和索引 innodb緩衝池將表的索引和資料進行快取,緩衝池允許從記憶體直接處理頻繁使用的資料,這加快了處理速度。在專用資料庫伺服器上,通常將多達80 的物理記憶體分配給innodb緩衝池。因為innodb的儲存引擎的工作方式總是將...

MySQL引擎 索引和優化

mysql引擎 索引和優化 li 一 儲存引擎 儲存引擎,mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。in...

mysql之優化 儲存引擎

1.2 myisam 與 innodb 主要區別 1.3 如何選擇mysql的儲存引擎 目前廣泛使用的是myisam和innodb兩種引擎 1.1.1 myisam myisam引擎是mysql 5.1及之前版本的預設引擎,它的特點是 1.1.2 innodb innodb在mysql 5.5後成為...