<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

        MyISAM

        每個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數據文件的擴展名為.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)。

        MyISAM引擎是大多數MySQL安裝程序的默認引擎,起源于早期版本MySQL支持的ISAM引擎。這種引擎提供了最佳的性能和功能的組合,盡管它缺少事務處理功能(使用InnoDB或者BDB引擎)并且使用表級鎖定。

        但是執行一下查詢發現,我在測試的時候使用的兩個測試表在創建的時候沒有指定引擎,但是發現這兩個表的存儲引擎都為InnoDB。(當然我們修改配職文件my.ini中的default-storage-engine=INNODB來修改)。

    mysql> select table_name,engine from tables where table_name like 'test%';
    +------------+--------+
    | table_name | engine |
    +------------+--------+
    | test | InnoDB |
    | test1 | InnoDB |
    +------------+--------+
    2 rows in set (0.08 sec)

        MYSQL文檔的解釋是:“存儲引擎和表類型:當MySQL被用MySQL配置向導安裝在Windows平臺上,InnoDB存儲引擎替代MyISAM存儲引擎作為替代。 ”


        為了測試MyISAM引擎表級鎖定,我們是用MyISAM引擎創建測試表TEST_ISAM。

        測試中打開兩個數據庫連接,一個連接執行call p_tst_isam();另外一個執行單條mysql> insert into test_isam(id,mc) values(1,'1');結果在第一個連接還沒有執行完的時候,第二個就完畢,沒有發現MyISAM引擎鎖表,這個問題我們暫時不再繼續測試下去。測試中發現一個問題,MyISAM引擎的表的INSERT速度遠遠大于InnoDB引擎:

    mysql> CREATE TABLE TEST_ISAM(ID INTEGER,MC VARCHAR(60)) ENGINE=MyISAM;
    Query OK, 0 rows affected (0.38 sec)

    mysql> select table_name,engine from information_schema.tables where table_name like 'test%';
    +------------+--------+
    | table_name | engine |
    +------------+--------+
    | test | InnoDB |
    | test1 | InnoDB |
    | test_isam | MyISAM |
    +------------+--------+
    3 rows in set (0.00 sec)

    創建存儲過程p_test_isam

    delimiter //
    create procedure p_test_isam()
    begin
    declare counter int;
    set counter = 1000000;
    while counter >= 1 do
    insert into test_isam(id,mc) values(counter,'test');
    set counter = counter - 1;
    end while;
    end
    //

    delimiter ;

        我們在以前的測試例子中: InnoDB引擎 INSERT 1000條數據花費34秒

    mysql> call p_test();
    Query OK, 1 row affected (34.48 sec)

    MyISAM引擎INSERT 1000000 條數據花費時間20多秒:

    mysql> call p_test_isam();
    Query OK, 1 row affected (22.95 sec)

        所以,我們如果在使用非事物處理的表(也就是一些只有單用戶使用的表)的時候可以采用MyISAM引擎來提高速度,當然了,INSERT的時候可以利用 MYSQL的BULK INSERT功能來出也是能大大提高性能的,這些我們將在MYSQL數據庫優化一?***:

    INSERT INTO TEST VALUES(VAL11,VAL12),(VAL21,VAL22)……

        測試完畢,翻看一下MYSQL文檔,的確有下面一段話,和我們的測試結果吻合。

    MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默認的存儲引擎,除非你配置MySQL默認使用另外一個引擎。

    MERGE引擎

        MERGE引擎類型允許你把許多結構相同的表合并為一個表。然后可以執行查詢,從多個表返回的結果就像從一個表返回的結果一樣。每一個合并的表必須有同樣的表定義。

        MERGE存儲引擎在下面這種使用場合會最為有用,如果需要把日志紀錄不停的錄入MySQL數據庫,并且每天、每周或者每個月都創建一個單一的表,而且要制作來自多個表的合計查詢,MERGE表這時會非常有效。然而,這項功能有局限性。只能合并MyISAM表而且必須嚴格遵守相同的表定義的限制。雖然這看起來好像是一個大問題,但是,如果使用另外一種表類型(例如InnoDB),這種合并可能就不需要了。

        MEMORY(內存)存儲引擎

        MEMORY(內存)存儲引擎(以前稱作HEAP存儲引擎)在內存中存儲全部數據。一旦MySQL服務器關閉,存儲在內存中的任何信息都將丟失。然而,單個表的格式將保留,使你能夠創建一個用于存儲信息的臨時表。這樣,每次數據庫服務器啟動時,你不需要重新創新這個表就可以快速地訪問信息。

        長期使用MEMORY存儲引擎一般來說不是一個好主意,因為數據很容易丟失。然而,如果你有足夠的內存,使用基于MEMORY的表在大型數據集中執行復雜的查詢是一種非常有效的方法,它能夠很大程度的提高性能。

        使用MEMORY表的最佳方法是使用一個“select”語句從你原來的基于磁盤的表中選擇一個大型的數據集,然后對你需要的具體部分進一步分析那些信息。我過去曾經使用這個技術提取了一個月的網絡記錄數據,實際上就是從使用ARCHIVE存儲引擎制作的表中提取的數據,然后對具體的URL、網站和其它重點進行查詢。

        EXAMPLE引擎

        EXAMPLE引擎實際上是一個存儲引擎編程的例子,能夠用作MySQL系統中其它引擎的基礎。EXAMPLE不支持數據插入,對于任何形式的數據庫訪問來說也不是一個實用的引擎。然而,EXAMPLE是一個很好的指南,指導你如何開發自己的存儲引擎,因此對于程序員來說是一個有效的引擎。

        BDB存儲引擎

        BDB表可能有一個更大的崩潰幸存機會,并且也具有對事務COMMIT和ROLLBACK操作的能力,BDB引擎支持頁級鎖定。

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

    給出一個事務控制的例子:

    mysql> CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A)) ENGINE=InnoDB;
    Query OK, 0 rows affected (0.30 sec)

    mysql> BEGIN;
    Query OK, 0 rows affected (0.00 sec)

    mysql> INSERT INTO CUSTOMER VALUES (10, 'Heikki');
    Query OK, 1 row affected (0.00 sec)

    mysql> COMMIT;
    Query OK, 0 rows affected (0.03 sec)

    mysql> SET AUTOCOMMIT=0;
    Query OK, 0 rows affected (0.00 sec)

    mysql> INSERT INTO CUSTOMER VALUES (15, 'John');
    Query OK, 1 row affected (0.00 sec)

    mysql> ROLLBACK;
    Query OK, 0 rows affected (0.06 sec)

    mysql> SELECT * FROM CUSTOMER;
    +------+--------+
    | A | B |
    +------+--------+
    | 10 | Heikki |
    +------+--------+
    1 row in set (0.00 sec)

        InnoDB存儲引擎相關的內容非常復雜涉及到事物處理、日志、備份和恢復、鎖定、多版本、性能、表和索引的結構、磁盤IO等很多方面的知識。

        我們以上只講述了MYSQL的幾個存儲引擎,使我們能夠對MYSQL的存儲引擎有個基本的認識。MYSQL還提供了BDB (BerkeleyDB)存儲引擎、FEDERATED存儲引擎、ARCHIVE存儲引擎、CSV存儲引擎、BLACKHOLE存儲引擎等,這里就不再詳細說明了。
    posted on 2008-06-12 13:48 lzj520 閱讀(325) 評論(0)  編輯  收藏 所屬分類: mysql
    主站蜘蛛池模板: 亚洲国产三级在线观看| 亚洲爆乳无码一区二区三区| 97se亚洲国产综合自在线| 1000部拍拍拍18勿入免费视频下载 | 污视频网站免费观看| 国产精品无码一区二区三区免费| 亚洲精品无码专区在线| 国产免费私拍一区二区三区| 青草久久精品亚洲综合专区| 亚洲精品线路一在线观看 | 50岁老女人的毛片免费观看| 亚洲网红精品大秀在线观看| 成年在线观看网站免费| 亚洲狠狠色丁香婷婷综合| 免费萌白酱国产一区二区| igao激情在线视频免费| 亚洲久本草在线中文字幕| 免费可以在线看A∨网站| 亚洲爆乳无码专区www| JLZZJLZZ亚洲乱熟无码| 免费在线观看一级片| 亚洲视频精品在线观看| 插B内射18免费视频| 国产精品九九久久免费视频| 久久久亚洲精品无码| 黄页网站免费在线观看| 色妞www精品视频免费看| 国产亚洲一区二区手机在线观看| AV无码免费永久在线观看| 国产亚洲精品仙踪林在线播放| 亚洲熟妇无码AV在线播放| 国产一卡2卡3卡4卡2021免费观看| 精品国产亚洲一区二区三区在线观看| 久久亚洲精品无码观看不卡| 亚洲毛片免费观看| 美女扒开屁股让男人桶爽免费| 亚洲精品无码久久久影院相关影片| 青青视频观看免费99| 一出一进一爽一粗一大视频免费的 | 中国人免费观看高清在线观看二区 | 亚洲成av人无码亚洲成av人|