高性能MySQL03-存儲引擎

一、簡介

關於InnoDB與MyISAM存儲引擎已經在前面的章節有所介紹,這裏就不再重複了,談談MySQL的其它存儲引擎吧。

二、其它的存儲引擎

1、CSV引擎

CSV引擎可以將普通的CSV文件作爲MySQL的表來處理,但這種表不支持索引。CSV引擎可以在數據庫運行時拷入或者拷出文件。可以將Excellent等電子表格軟件中的數據存儲爲CSV文件,然後複製到MySQL數據目錄下,就能在MySQL中打開使用。同樣,如果將數據寫入到一個CSV引擎表,其它的外部程序也能立即從表的數據文件中讀取CSV格式的數據。因此CSV引擎可以作爲一種數據交換的機制,非常有用。

2、Memory引擎

如果需要快速地訪問數據,並且這些數據不會被修改,重啓以後丟失也沒有關係,那麼使用Memory表(以前也叫做HEAP表)是非常有用的。Memory表至少比MyISAM表要快一個數量級,因爲所有的數據都保存在內存中,不需要進行磁盤I/O。Memory表的結構在重啓以後還會保留,但數據會丟失。

3、NDB集羣引擎

2003年,當時的MySQL AB公司從索尼愛立信公司收購了NDB數據庫,然後開發了NDB集羣存儲引擎,以及分佈式的、share-nothing的、容災的、高可用的NDB數據庫的組合,被稱爲MySQL集羣(MySQL Cluster)。

MySQL可以支持很多存儲引擎,但大部份情況下,我們選擇InnoDB都不會錯的。對於如何選擇存儲引擎,可以簡單地歸納爲一句話:“除非需要用到某些InnoDB不具備的特性,並且沒有其他辦法可以代替,否則都應該優先選擇InnoDB引擎”。例如,如果要用到全文索引,建議優先考慮InnoDB加上Sphinx的組合,而不是使用支持全文索引的MyISAM。

4、XtraDB引擎

Percona的XtraDB存儲引擎是基於InnoDB引擎的一個改進版本,已經包含在Percona Server和MariaDB中,它的改進點主要集中在性能、可測量性和操作靈活性方面。XtraDB可以作爲InnoDB的一個完全替代產品,甚至可以兼容地讀寫InnoDB的數據文件,並支持InnoDB的所有查詢。

三、轉換表的引擎

1、ALTER TABLE

將表從一個引擎修改爲另一個引擎最簡單的辦法是使用ALTER TABLE語句。

下面的語句將mytable的引擎修改爲InnoDB:

mysql>ALTER TABLE mytable ENGINE = InnoDB;

上述語法可以適用任何存儲引擎。但有一個問題:需要執行很長時間。MySQL會按行將數據從原表複製到一張新的表中,在複製期間可能會消耗系統所有的I/O能力,同時原表上會加上讀鎖。

2、導入與導出

爲了更好地控制轉換的過程,可以使用mysqldump工具將數據導出到文件,然後然後修改文件中的CREATE TABLE語句的存儲引擎選項,注意同時修改表名,因爲同一個數據庫中不能存在相同的表名,即便它們使用的是不同的存儲引擎。同時要注意mysqldump默認會自動在CREATE TABLE語句前面加上DROP TABLE語句,不注意這點可能會導致數據丟失。

3、創建與查詢(CREATE和SELECT)
第三種轉換的技術綜合了第一種方法的高效和第二種方法的安全。不需要導出整個表的數據,而是先創建一個新的存儲引擎的表,然後利用INSERT...SELECT語法來導入數據:

mysql>CREATE TABLE innodb_table LIKE myisam_table;
mysql>ALTER TABLE innodb_table ENGINE=InnoDB;
mysql>INSERT INTO innodb_table SELECT * FROM myisam_table;

如果數據量很大的話,可以考慮對插入操作通過事務進行分批處理:

mysql>START TRANSACTION;
mysql>INSERT INTO innodb_table SELECT * FROM myisam_table
    ->WHERE id BETWEEN x AND y;
mysql>COMMIT;

四、附

1、查詢表的引擎信息

使用SHOW TABLE STATUS命令可以顯示錶的相關信息,如:

mysql> show table status like 'user'\G
*************************** 1. row ***************************
           Name: user
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 3
 Avg_row_length: 105
    Data_length: 316
Max_data_length: 281474976710655
   Index_length: 2048
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2015-11-10 01:41:24
    Update_time: 2017-04-05 14:55:36
     Check_time: NULL
      Collation: utf8_bin
       Checksum: NULL
 Create_options:
        Comment: Users and global privileges
1 row in set (0.00 sec)

其中Engine說明表的存儲引擎類型。

參考

《高性能MySQL》 [美]Baron Scbwartz, Peter Zaitsev, Vadim Tkacbenko 著

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章