久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

InnoDB和MyISAM有哪些區別

127次閱讀
沒有評論

共計 3207 個字符,預計需要花費 9 分鐘才能閱讀完成。

這篇文章主要講解了“InnoDB 和 MyISAM 有哪些區別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“InnoDB 和 MyISAM 有哪些區別”吧!

 
MyISAM: 這個是默認類型, 它是基于傳統的 ISAM 類型,ISAM 是 Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫, 它是存儲記錄和文件的標準方法. 與其他存儲引擎比較,MyISAM 具有檢查和修復表格的大多數工具. MyISAM 表格可以被壓縮, 而且它們支持全文搜索. 它們不是事務安全的, 而且也不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執行大量的 SELECT,MyISAM 是更好的選擇。 www.2cto.com  
 
InnoDB: 這種類型是事務安全的. 它與 BDB 類型具有相同的特性, 它們還支持外鍵.InnoDB 表格速度很快. 具有比 BDB 還豐富的特性, 因此如果需要一個事務安全的存儲引擎, 建議使用它. 如果你的數據執行大量的 INSERT 或 UPDATE, 出于性能方面的考慮,應該使用 InnoDB 表,
對于支持事物的 InnoDB 類型的標,影響速度的主要原因是 AUTOCOMMIT 默認設置是打開的,而且程序沒有顯式調用 BEGIN 開始事務,導致每插入一條都自動 Commit,嚴重影響了速度。可以在執行 sql 前調用 begin,多條 sql 形成一個事物(即使 autocommit 打開也可以),將大大提高性能。
 
InnoDB 和 MyISAM 是在使用 MySQL 最常用的兩個表類型,各有優缺點,視具體應用而定。下面是已知的兩者之間的差別,僅供參考。
innodb
InnoDB 給 MySQL 提供了具有事務 (commit)、回滾(rollback) 和崩潰修復能力 (crash recovery capabilities) 的事務安全 (transaction-safe (ACID compliant)) 型表。InnoDB 提供了行鎖 (locking on row level),提供與 Oracle 類型一致的不加鎖讀取(non-locking read in SELECTs)。這些特性均提高了多用戶并發操作的性能表現。在 InnoDB 表中不需要擴大鎖定(lock escalation),因為 InnoDB 的列鎖定(row level locks) 適宜非常小的空間。InnoDB 是 MySQL 上第一個提供外鍵約束 (FOREIGN KEY constraints) 的表引擎。
 
InnoDB 的設計目標是處理大容量系統,它的 CPU 利用率是其它基于磁盤的關系數據庫引擎所不能比的。在技術上,InnoDB 是一套放在 MySQL 后臺的完整數據庫系統,InnoDB 在主內存中建立其專用的緩沖池用于高速緩沖數據和索引。InnoDB 把數據和索引存放在表空間里,可能包含多個文件,這與其它的不一樣,舉例來說,在 MyISAM 中,表被存放在單獨的文件中。InnoDB 表的大小只受限于操作系統的文件大小,一般為 2 GB。
InnoDB 所有的表都保存在同一個數據文件 ibdata1 中(也可能是多個文件,或者是獨立的表空間文件), 相對來說比較不好備份,免費的方案可以是拷貝數據文件、備份 binlog,或者用 dump。 www.2cto.com  
 
MyISAM 
MyISAM 是 MySQL 缺省存貯引擎 .
每張 MyISAM 表被存放在三個文件。frm 文件存放表格定義。數據文件是 MYD (MYData)。索引文件是 MYI (MYIndex) 引伸。
因為 MyISAM 相對簡單所以在效率上要優于 InnoDB.. 小型應用使用 MyISAM 是不錯的選擇.
MyISAM 表是保存成文件的形式, 在跨平臺的數據轉移中使用 MyISAM 存儲會省去不少的麻煩
 
以下是一些細節和具體實現的差別:
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%”
任何一種表都不是萬能的,只用恰當的針對業務類型來選擇合適的表類型,才能最大的發揮 MySQL 的性能優勢。
 
以下是 InnoDB 和 MyISAM 的一些聯系和區別!
1. 4.0 以上 mysqld 都支持事務,包括非 max 版本。3.23 的需要 max 版本 mysqld 才能支持事務。
2. 創建表時如果不指定 type 則默認為 myisam,不支持事務。
可以用 show create table tablename 命令看表的類型。
2.1 對不支持事務的表做 start/commit 操作沒有任何效果,在執行 commit 前已經提交,測試:
執行一個 msyql: www.2cto.com  
use test;
drop table if exists tn;
create table tn (a varchar(10)) type=myisam;
drop table if exists ty;
create table ty (a varchar(10)) type=innodb;
begin;
insert into tn values(a
insert into ty values(a
select * from tn;
select * from ty;
 
都能看到一條記錄
執行另一個 mysql:
use test;
select * from tn;
select * from ty;
只有 tn 能看到一條記錄
然后在另一邊
commit;
才都能看到記錄。
3. 可以執行以下命令來切換非事務表到事務(數據不會丟失),innodb 表比 myisam 表更安全:
   alter table tablename type=innodb;
3.1 innodb 表不能用 repair table 命令和 myisamchk -r table_name
但可以用 check table,以及 mysqlcheck [OPTIONS] database [tables]
 
4. 啟動 my 的命令行中添加了以下參數可以使新發布的 mysql 數據表都默認為使用事務(
只影響到 create 語句。)
–default-table-type=InnoDB
測試命令: www.2cto.com  
use test;
drop table if exists tn;
create table tn (a varchar(10));
show create table tn;
 
5. 臨時改變默認表類型可以用:
set table_type=InnoDB;
show variables like table_type
或:
mysqld -max -nt –standalone –default-table-type=InnoDB
 

感謝各位的閱讀,以上就是“InnoDB 和 MyISAM 有哪些區別”的內容了,經過本文的學習后,相信大家對 InnoDB 和 MyISAM 有哪些區別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計3207字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 宿迁市| 嘉祥县| 长泰县| 无极县| 定远县| 昌江| 巴彦县| 西乡县| 嘉义县| 山丹县| 赫章县| 黔西县| 夏邑县| 无锡市| 读书| 安阳市| 镇赉县| 临桂县| 五莲县| 榆社县| 博白县| 榆林市| 瑞昌市| 会理县| 洮南市| 五华县| 原平市| 鄂尔多斯市| 大理市| 平定县| 甘谷县| 平乐县| 闽清县| 富阳市| 滦平县| 泸溪县| 义乌市| 江华| 偃师市| 日喀则市| 颍上县|