Mysql的儲存引擎之 MyISAM儲存引擎

2021-07-05 03:30:01 字數 4372 閱讀 9420

myisam儲存引擎是mysql5.5版本之前的的預設儲存引擎。

建立乙個基於myisam儲存引擎的表table_myisam:

mysql> create table table_myisam(id int) engine=myisam ;

query ok, 0 rows affected (0.00 sec)

檢視下table_ myisam表的資料檔案:

注:

. myd

是儲存資料的檔案;

.myi

是儲存表索引資訊的檔案;

.frm

是表結構定義檔案

[mysql@localhost test]$ ll table_myisam.*

-rw-rw---- 1 mysql mysql 8556 sep 4 12:25 table_myisam.frm

-rw-rw---- 1 mysql mysql 0 sep 4 12:25 table_myisam.myd

-rw-rw---- 1 mysql mysql 1024 sep 4 12:25 table_myisam.myi

三種儲存格式:靜態、動態、壓縮

2.1、靜態格式

靜態:fixed, 定長的列(每一列都是固定的位元組數),不包含變長型別的列(例如:varchar)

建立乙個靜態的表:

mysql> create table table_myisam_fix(idint, name char(20)) engine=myisam;

query ok, 0 rows affected (0.04 sec)

檢視表table_myisam_fix的狀態,為fixed靜態格式:

mysql> show table status like'table_myisam_fix';

| name | engine | version | row_format | rows

| table_myisam_fix | myisam | 10 | fixed | 0

……

2.2、動態格式

建立乙個動態的表:

mysql> create table table_myisam_dynamic(id int, name varchar(20)) engine=myisam;

query ok, 0 rows affected (0.00 sec)

檢視表table_myisam_dynamic的狀態,為dynamic動態格式:

mysql> show table status like'table_myisam_dynamic';

| name | engine | version | row_format | rows

| table_myisam_dynamic | myisam | 10 | dynamic | 0

……

2.3、row_format的作用

在create table 或alter table的時候,可通過row_format來強制是靜態還是動態格式

下面通過

row_format

來強制建立乙個只有不定長列的靜態表:

mysql> create table table_myisam_dynamic_format_fix(name varchar(10))row_format=fixed engine=myisam;

query ok, 0 rows affected (0.36 sec)

mysql> show table status like 'table_myisam_dynamic_format_fix';

| name | engine | version| row_format | rows

| table_myisam_dynamic_format_fix | myisam | 10 | fixed | 0

……

1:雖然只有不定長的

varchar

列,但由於限制了

row_format=fixed

,所以建立的表是靜態表,而且列是固定長度,當不足位數時會補位以到達定義的列長度;

2:當表中含有

blob

、text

型別,強制的轉換

row_format=fixed

將無效,只能是動態表;

2.4、壓縮格式

壓縮格式比較特殊,用myisampack工具建立,壓縮後是唯讀的表,不能新增或者修改記錄,但空間占用會很小

建立乙個用於壓縮的測試表table_myisam_compressed:

mysql> create table table_myisam_compressed engine=myisam as select * from information_schema.columns;

query ok, 1732 rows affected (1.09 sec)

records: 1732 duplicates: 0 warnings: 0

插入測試資料,多插入幾次:

mysql> insert into table_myisam_compressed select * from table_myisam_compressed;

query ok, 1732 rows affected (0.06 sec)

records: 1732 duplicates: 0 warnings: 0

檢視資料檔案的大小,為7.9m:

[mysql@localhost test]$ ll -h  table_myisam_compressed.*

-rw-rw---- 1 mysql mysql 14k sep 7 14:45 table_myisam_compressed.frm

-rw-rw---- 1 mysql mysql 7.9m sep 7 14:46 table_myisam_compressed.myd

-rw-rw---- 1 mysql mysql 1.0k sep 7 14:46 table_myisam_compressed.myi

使用myisampack工具壓縮表:

[mysql@localhost test]$ myisampack ./table_myisam_compressed.myi

compressing ./table_myisam_compressed.myd:(55424 records)

- calculating statistics

- compressing file

55.73%

再次檢視資料檔案的大小,變為3.5m了:

[mysql@localhost test]$ ll -h  table_myisam_compressed.*

-rw-rw---- 1 mysql mysql 14k sep 7 14:45 table_myisam_compressed.frm

-rw-rw---- 1 mysql mysql 3.5m sep 7 14:46 table_myisam_compressed.myd

-rw-rw---- 1 mysql mysql 1.0k sep 7 14:52 table_myisam_compressed.myi

執行myisamchk以重新建立index

[mysql@localhost test]$ myisamchk -rq --sort-index --analyze table_myisam_compressed.myi

- check record delete-chain

- recovering (with keycache) myisam-table'table_myisam_compressed.myi'

data records: 55424

- sorting index for myisam-table 'table_myisam_compressed.myi'

執行mysqladminflush-tables重新整理表:

[root@localhost ~]# mysqladmin flush-tables
解壓縮使用—unpack選項,可自己實驗。

Mysql儲存引擎InnoDB與Myisam的區別

1,事務處理 innodb 支援事務功能,myisam 不支援。myisam 的執行速度更快,效能更好。2,select update insert delete 操作 myisam 如果執行大量的select,myisam是更好的選擇 innodb 如果你的資料執行大量的insert或update...

MYSQL儲存引擎InnoDB和myisam區別

mysql5.5之後的預設儲存引擎 如果你為乙個表指定auto increment列,在資料詞典裡的innodb表控制代碼包含乙個名為自動增長計數器的計數器,它被用在為該列賦新值。自動增長計數器僅被儲存在主記憶體中,而不是存在磁碟上 關於該計算器的演算法實現,請參考 auto increment列在...

MYSQL儲存引擎innodb和myisam的區別

innodb 預設事務型引擎,最重要最廣泛的儲存引擎,效能非常優秀,資料庫儲存在共享表空間,可以通過配置分開。對主鍵查詢的效能高於其他型別的儲存引擎。它內部做了很多優化,從磁碟讀取資料時自動在記憶體構建hash 雜湊 索引,插入資料時自動構建插入緩衝區。它可以通過一些機制和工具支援真正的熱備份,支援...