亚洲综合小说另类图片

<dfn id="4z7un"><s id="4z7un"></s></dfn>
          1. <nav id="4z7un"><sup id="4z7un"></sup></nav>
            <th id="4z7un"></th>

          2. <output id="4z7un"><small id="4z7un"><input id="4z7un"></input></small></output>
            八周年活動月
            歡迎訪問長沙友點軟件科技有限公司旗下產品友點CMS官方網站!
            友點CMS

            MySQL: InnoDB 還是 MyISAM?

            來源:友點CMS 日期:2014-12-28 11:06:14 屬于:數據庫
            MyISAM存儲引擎
                   MyISAM是 默認存儲引擎。它基于更老的ISAM代碼,但有很多有用的擴展。MyISAM存儲引擎的一些特征:
                  所有數據值先存儲低字節。這使得數據機和操作系統分離。二進制輕便性的唯一要求是機器使用補碼(如最近20年的機器有的一樣)和IEEE浮點格式(在主流機器中也完全是主導的)。唯一不支持二進制兼容性的機器是嵌入式系統。這些系統有時使用特殊的處理器。
                    先存儲數據低字節并不嚴重地影響速度;數據行中的字節一般是未聯合的,從一個方向讀未聯合的字節并不比從反向讀更占用更多的資源。服務器上的獲取列值的代碼與其它代碼相比并不顯得時間緊。

                     大文件(達63位文件長度)在支持大文件的文件系統和操作系統上被支持。
                     當把刪除和更新及插入混合的時候,動態尺寸的行更少碎片。這要通過合并相鄰被刪除的塊,以及若下一個塊被刪除,就擴展到下一塊來自動完成。
                     每個MyISAM表最大索引數是64。 這可以通過重新編譯來改變。每個索引最大的列數是16個。
                     最大的鍵長度是1000字節。這也可以通過編譯來改變。對于鍵長度超過250字節的情況,一個超過1024字節的的鍵塊被用上。
                     BLOB和TEXT列可以被索引。
                    NULL值被允許在索引的列中。這個占每個鍵的0-1個字節。
                     所有數字鍵值以高字節為先被存儲以允許一個更高地索引壓縮。
                    當記錄以排好序的順序插入(就像你使用一個AUTO_INCREMENT列之時),索引樹被劈開以便高節點僅包含一個鍵。這改善了索引樹的空間利用率。
                     每表一個AUTO_INCREMEN列的內部處理。MyISAM為INSERT和UPDATE操作自動更新這一 列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂的值被刪除之后就不能再利用。(當AUTO_INCREMENT列被定義為多列索 引的最后一列,可以出現重使用從序列頂部刪除的值的情況 )。AUTO_INCREMENT值可用ALTER TABLE或myisamch來重置。
                     如果數據文件中間的表沒有自由塊了,在其它線程從表讀的同時,你可以INSERT新行到表中。(這被認識為并發操作 )。自由塊的出現是作為刪除行的結果,或者是用比當前內容多的數據對動態長度行更新的結果。當所有自由塊被用完(填滿),未來的插入又變成并發。
                     你可以把數據文件和索引文件放在不同目錄,用DATA DIRECTORY和INDEX DIRECTORY選項CREATE TABLE以獲得更高的速度,請參閱13.1.5節,“CREATE TABLE語法”。
                     每個字符列可以又不同的字符集。
                    在MyISAM索引文件里又一個標志,它表明表是否被正確關閉。如果用--myisam-recover選項啟動mysqld,MyISAM表在打開得時候被自動檢查,如果被表被不恰當地關閉,就修復表。
                    如果你用--update-state選項運行myisamchk,它標注表為已檢查。myisamchk --fast只檢查那些沒有這個標志的表。
                    myisamchk --analyze為部分鍵存儲統計信息,也為整個鍵存儲統計信息。
                    myisampack可以打包BLOB和VARCHAR列。

            MyISAM也支持下列特征:

                     支持true VARCHAR類型;VARCHAR列以存儲在2個字節中的長度來開始。
                     有VARCHAR的表可以有固定或動態記錄長度。
                     VARCHAR和CHAR列可以多達64KB。
                     一個被搞亂的已計算索引對可對UNIQUE來使用。這允許你在表內任何列的合并上有UNIQUE。(盡管如此,你不能在一個UNIQUE已計算索引上搜索)。

            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次插入/更新的負荷。

            InnoDB和MyISAM的區別
            區別概述:
            MyISAM 是MySQL中默認的存儲引擎,一般來說不是有太多人關心這個東西。決定使用什么樣的存儲引擎是一個很tricky的事情,但是還是值我們去研究一下,這里的文章只考慮 MyISAM 和InnoDB這兩個,因為這兩個是最常見的。

            下面先讓我們回答一些問題:
            你的數據庫有外鍵嗎?
            你需要事務支持嗎?
            你需要全文索引嗎?
            你經常使用什么樣的查詢模式?
            你的數據有多大?


            思考上面這些問題可以讓你找到合適的方向,但那并不是絕對的。如果你需要事務處理或是外鍵,那么InnoDB 可能是比較好的方式。如果你需要全文索引,那么通常來說 MyISAM是好的選擇,因為這是系統內建的,然而,我們其實并不會經常地去測試兩百萬行記錄。所以,就算是慢一點,我們可以通過使用Sphinx從 InnoDB中獲得全文索引。

            數據的大小,是一個影響你選擇什么樣存儲引擎的重要因素,大尺寸的數據集趨向于選擇InnoDB方式,因為其支持事務處理和故障恢復。數據庫的在小 決定了故障恢復的時間長短,InnoDB可以利用事務日志進行數據恢復,這會比較快。而MyISAM可能會需要幾個小時甚至幾天來干這些事,InnoDB 只需要幾分鐘。

            您操作數據庫表的習慣可能也會是一個對性能影響很大的因素。比如: COUNT() 在 MyISAM 表中會非???,而在InnoDB 表下可能會很痛苦。而主鍵查詢則在InnoDB下會相當相當的快,但需要小心的是如果我們的主鍵太長了也會導致性能問題。大批的inserts 語句在MyISAM下會快一些,但是updates 在InnoDB 下會更快一些——尤其在并發量大的時候。

            所以,到底你檢使用哪一個呢?根據經驗來看,如果是一些小型的應用或項目,那么MyISAM 也許會更適合。當然,在大型的環境下使用MyISAM 也會有很大成功的時候,但卻不總是這樣的。如果你正在計劃使用一個超大數據量的項目,而且需要事務處理或外鍵支持,那么你真的應該直接使用InnoDB方 式。但需要記住InnoDB 的表需要更多的內存和存儲,轉換100GB 的MyISAM 表到InnoDB 表可能會讓你有非常壞的體驗。

            區別總結:
            1.InnoDB不支持FULLTEXT類型的索引。
            2.InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。
            3.對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引。
            4.DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
            5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據后再改成InnoDB表,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用。

            另外,InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like “%aaa%”


            提升InnoDB性能的方法:
            MyISAM和InnoDB存儲引擎性能差別并不是很大,針對InnoDB來說,影響性能的主要是 innodb_flush_log_at_trx_commit 這個選項,如果設置為1的話,那么每次插入數據的時候都會自動提交,導致性能急劇下降,應該是跟刷新日志有關系,設置為0效率能夠看到明顯提升,當然,同 樣你可以SQL中提交“SET AUTOCOMMIT = 0”來設置達到好的性能。另外,還聽說通過設置innodb_buffer_pool_size能夠提升InnoDB的性能,但是我測試發現沒有特別明顯 的提升。

            基本上我們可以考慮使用InnoDB來替代我們的MyISAM引擎了,因為InnoDB自身很多良好的特點,比如事務支持、存儲 過程、視圖、行級鎖定等等,在并發很多的情況下,相信InnoDB的表現肯定要比MyISAM強很多,當然,相應的在my.cnf中的配置也是比較關鍵 的,良好的配置,能夠有效的加速你的應用。
            任何一種表都不是萬能的,只用恰當的針對業務類型來選擇合適的表類型,才能最大的發揮MySQL的性能優勢。

            上一文章:14款經典的MySQL客戶端軟件

            下一文章:沒有了

            亚洲综合小说另类图片
            <dfn id="4z7un"><s id="4z7un"></s></dfn>
                    1. <nav id="4z7un"><sup id="4z7un"></sup></nav>
                      <th id="4z7un"></th>

                    2. <output id="4z7un"><small id="4z7un"><input id="4z7un"></input></small></output>