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 雜湊 索引,插入資料時自動構建插入緩衝區。它可以通過一些機制和工具支援真正的熱備份,支援...