㈠ mysql中myisam innodb的區別有哪些
MYISAM 表是典型的數據與索引分離存儲,主鍵和二級索引沒有本質區別。比如在 MYISAM 表裡主鍵、唯一索引是一樣的,沒有本質區別。
MYISAM 表的索引存儲方式最大的缺點沒有按照物理數據行順序存儲,這樣無論對主鍵的檢索還是對二級索引的檢索都需要進行二次排序。
INNODB 表本身是索引組織表,也就是說索引就是數據。下圖表T1的數據行以聚簇索引的方式展示,非葉子節點保存了主鍵的值,葉子節點保存了主鍵的值以及對應的數據行,並且每個頁有分別指向前後兩頁的指針。
INNODB 表不同於 MYISAM,INNODB 表有自己的數據頁管理,默認 16KB。MYISAM 表數據的管理依賴文件系統,比如文件系統一般默認 4KB,MYISAM 的塊大小也是 4KB,MYISAM 表的沒有自己的一套崩潰恢復機制,全部依賴於文件系統。
INNODB 表這樣設計的優點有兩個:
1. 數據按照主鍵順序存儲。主鍵的順序也就是記錄行的物理順序,相比指向數據行指針的存放方式,避免了再次排序。
2. 兩個葉子節點分別含有指向前後兩個節點的指針,這樣在插入新行或者進行頁分裂時,只需要移動對應的指針即可。
但是也有缺點:
1. 二級索引由於同時保存了主鍵值,體積會變大。特別是主鍵設計不合理的時候,比如用 UUID 做主鍵。
2. 對二級索引的檢索需要檢索兩次索引樹。第一次通過檢索二級索引葉子節點,找到過濾行對應的主鍵值;第二次通過這個主鍵的值去聚簇索引中查找對應的行。
㈡ 資料庫引擎myisam 是什麼類型的跟其它類型有什麼區別
MyISAM是默認存儲引擎。它基於更老的ISAM代碼,但有很多有用的擴展。(注意MySQL 5.1不支持ISAM)。
每個MyISAM在磁碟上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數據文件的擴展名為.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)。
要明確表示你想要用一個MyISAM表格,請用ENGINE表選項指出來:
CREATE TABLE t (i INT) ENGINE = MYISAM;
注釋:老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM)。MySQL 5.1為向下兼容而支持這個語法,但TYPE現在被輕視,而ENGINE是首先的用法。
一般地,ENGINE選項是不必要的;除非默認已經被改變了,MyISAM是默認存儲引擎。
如下是MyISAM存儲引擎的一些特徵:
· 所有數據值先存儲低位元組。這使得數據機和操作系統分離。二進制輕便性的唯一要求是機器使用補碼(如最近20年的機器有的一樣)和IEEE浮點格式(在主流機器中也完全是主導的)。唯一不支持二進制兼容性的機器是嵌入式系統。這些系統有時使用特殊的處理器。
先存儲數據低位元組並不嚴重地影響速度;數據行中的位元組一般是未聯合的,從一個方向讀未聯合的位元組並不比從反向讀更佔用更多的資源。伺服器上的獲取列值的代碼與其它代碼相比並不顯得時間緊。
· 大文件(達63位文件長度)在支持大文件的文件系統和操作系統上被支持。
· 當把刪除和更新及插入混合的時候,動態尺寸的行更少碎片。這要通過合並相鄰被刪除的塊,以及若下一個塊被刪除,就擴展到下一塊來自動完成。
· 每個MyISAM表最大索引數是64。 這可以通過重新編譯來改變。每個索引最大的列數是16個。
· 最大的鍵長度是1000位元組。這也可以通過編譯來改變。對於鍵長度超過250位元組的情況,一個超過1024位元組的的鍵塊被用上。
· BLOB和TEXT列可以被索引。
· NULL值被允許在索引的列中。這個占每個鍵的0-1個位元組。
· 所有數字鍵值以高位元組為先被存儲以允許一個更高地索引壓縮。
· 當記錄以排好序的順序插入(就像你使用一個AUTO_INCREMENT列之時),索引樹被劈開以便高節點僅包含一個鍵。這改善了索引樹的空間利用率。
· 每表一個AUTO_INCREMEN列的內部處理。MyISAM為INSERT和UPDATE操作自動更新這一列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂的值被刪除之後就不能再利用。(當AUTO_INCREMENT列被定義為多列索引的最後一列,可以出現重使用從序列頂部刪除的值的情況)。AUTO_INCREMENT值可用ALTER TABLE或myisamch來重置。
· 如果數據文件中間的表沒有自由塊了,在其它線程從表讀的同時,你可以INSERT新行到表中。(這被認識為並發操作)。自由塊的出現是作為刪除行的結果,或者是用比當前內容多的數據對動態長度行更新的結果。當所有自由塊被用完(填滿),未來的插入又變成並發。
· 你可以把數據文件和索引文件放在不同目錄,用DATA DIRECTORY和INDEX DIRECTORY選項CREATE TABLE以獲得更高的速度。
· 每個字元列可以又不同的字元集。
· 在MyISAM索引文件里又一個標志,它表明表是否被正確關閉。如果用--myisam-recover選項啟動mysqld,MyISAM表在打開得時候被自動檢查,如果被表被不恰當地關閉,就修復表。
· 如果你用--update-state選項運行myisamchk,它標注表為已檢查。myisamchk --fast只檢查那些沒有這個標志的表。
· myisamchk --analyze為部分鍵存儲統計信息,也為整個鍵存儲統計信息。
· myisampack可以打包BLOB和VARCHAR列。
MyISAM也支持下列特徵:
· 支持true VARCHAR類型;VARCHAR列以存儲在2個位元組中的長度來開始。
· 有VARCHAR的表可以有固定或動態記錄長度。
· VARCHAR和CHAR列可以多達64KB。
· 一個被搞亂的已計算索引對可對UNIQUE來使用。這允許你在表內任何列的合並上有UNIQUE。(盡管如此,你不能在一個UNIQUE已計算索引上搜索)。
MyISAM表的存儲格式
靜態格式是MyISAM表的默認存儲格式。當表不包含變數長度列(VARCHAR, BLOB, 或TEXT)時,使用這個格式。每一行用固定位元組數存儲。
MyISAM的三種存儲格式中,靜態格式就最簡單也是最安全的(至少對於崩潰而言)。靜態格式也是最快的on-disk格式。快速來自於數據文件中的行在磁碟上被找到的容易方式:當按照索引中的行號查找一個行時,用行長度乘以行號。同樣,當掃描一個表的時候,很容易用每個磁碟讀操作讀一定數量的記錄。
當MySQL伺服器正往一個固定格式MyISAM文件寫的時候,如果計算機崩潰了,安全是顯然的。在這種情況下,myisamchk可以容易地決定每行從哪裡開始到哪裡結束,所以它通常可以收回所有記錄,除了寫了一部分的記錄。注意,基於數據行,MyISAM表索引可以一直被重新構建。
靜態格式表的一般特徵:
· CHAR列對列寬度是空間填補的。
· 非常快。
· 容易緩存。
· 崩潰後容易重建,因為記錄位於固定位置。
· 重新組織是不必要的,除非你刪除巨量的記錄並且希望為操作系統騰出磁碟空間。為此,可使用OPTIMIZE TABLE或者myisamchk -r。
· 通常比動態格式表需要更多的磁碟空間。
動態表特徵
如果一個MyISAM表包含任何可變長度列(VARCHAR, BLOB或TEXTDynamic),或者如果一個表被用ROW_FORMAT=DYNAMIC選項來創建,動態存儲格式被使用。
這個格式更為復雜一點,因為每行有一個表明行有多長的頭。當一個記錄因為更新的結果被變得更長,該記錄也可以在超過一個位置處結束。
你可以使用OPTIMIZE TABLE或myisamchk來對一個表整理碎片。如果在一個表中有你頻繁訪問或改變的固定長度列,表中也有一些可變長度列,僅為避免碎片而把這些可變長度列移到其它表可能是一個好主意。
動態格式表的一般特徵:
· 除了長度少於4的列外,所有的字元串列是動態的。
· 在每個記錄前面是一個點陣圖,該點陣圖表明哪一列包含空字元串(對於字元串列)或者0(對於數字列)。注意,這並不包括包含NULL值的列。如果一個字元列在拖曳空間移除後長度為零,或者一個數字列為零值,這都在點陣圖中標注了且列不被保存到磁碟。 非空字元串被存為一個長度位元組加字元串的內容。
· 通常比固定長度表需要更少的磁碟空間。
· 每個記錄僅使用必需大小的空間。盡管如此,如果一個記錄變大,它就按需要被分開成多片,造成記錄碎片的後果。比如,你用擴展行長度的信息更新一行,該行就變得有碎片。在這種情況下,你可以時不時運行OPTIMIZE TABLE或myisamchk -r來改善性能。可使用myisamchk -ei來獲取表的統計數據。
· 動態格式表在崩潰後要比靜態格式表更難重建,因為一個記錄可能被分為多個碎片且鏈接(碎片)可能被丟失。
已壓縮表特徵
已壓縮存儲格式是由myisampack工具創建的只讀格式。
所有MySQL分發版里都默認包括myisampack。已壓縮表可以用myisamchk來解壓縮。
已壓縮表有下列特徵:
· 已壓縮表占據非常小的磁碟空間。這最小化了磁碟用量,當使用緩慢的磁碟(如CD-ROM)之時,這是很有用的。
· 每個記錄是被單獨壓縮的,所以只有非常小的訪問開支。依據表中最大的記錄,一個記錄的頭在每個表中占據1到3個位元組。每個列被不同地壓縮。通常每個列有一個不同的Huffman樹。一些壓縮類型如下:
o 後綴空間壓縮。
- 前綴空間壓縮。
- 零值的數用一個位來存儲。
- 如果在一個整型列中的值有一個小的范圍,列被用最小可能的類型來存儲。比如,一個BIGINT列(8位元組),如果所有它的值在-128到127范圍內,它可以被存儲為TINYINT列(1位元組)
- 如果一個列僅有一小組可能的值,列的類型被轉化成ENUM。
- 一個列可以使用先前壓縮類型的任意合並。
· 可以處理固定長度或動態長度記錄。
㈢ anwsion的資料庫表類型InnoDB和MyISAM有何差別選哪個更好
如果打算為項目選擇一款免費、開源的資料庫,那麼你可能會在MySQL與PostgreSQL之間猶豫不定。MySQL與PostgreSQL都是免費、開源、強大、且功能豐富的資料庫。你主要的問題可能是:哪一個才是最好的開源資料庫,MySQL還是PostgreSQL呢?該選擇哪一個開源資料庫呢?
在選擇資料庫時,你所做的是個長期的決策,因為後面如果再改變決定將是非常困難且代價高昂的。你希望一開始就選擇正確。兩個流行的開源資料庫MySQL與PostgreSQL常常成為最後要選擇的產品。對這兩個開源資料庫的高層次概覽將會有助於你選擇最適合自己需要的。
MySQL
MySQL相對來說比較年輕,首度出現在1994年。它聲稱自己是最流行的開源資料庫。MySQL就是LAMP(用於Web開發的軟體包,包括Linux、Apache及Perl/PHP/Python)中的M。構建在LAMP棧之上的大多數應用都會使用MySQL,包括那些知名的應用,如WordPress、Drupal、Zend及phpBB等。
一開始,MySQL的設計目標是成為一個快速的Web伺服器後端,使用快速的索引序列訪問方法(ISAM),不支持ACID。經過早期快速的發展之後,MySQL開始支持更多的存儲引擎,並通過InnoDB引擎實現了ACID。MySQL還支持其他存儲引擎,提供了臨時表的功能(使用MEMORY存儲引擎),通過MyISAM引擎實現了高速讀的資料庫,此外還有其他的核心存儲引擎與第三方引擎。
MySQL的文檔非常豐富,有很多質量不錯的免費參考手冊、圖書與在線文檔,還有來自於Oracle和第三方廠商的培訓與支持。
MySQL近幾年經歷了所有權的變更和一些頗具戲劇性的事件。它最初是由MySQL AB開發的,然後在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle支持MySQL的多個版本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有一些是免費下載的,另外一些則是收費的。其核心代碼基於GPL許可,對於那些不想使用GPL許可的開發者與廠商來說還有商業許可可供使用。
㈣ 資料庫都是myisam表,為什麼ibdata1有8個G
1,mysql中的存儲引擎如何設置?------------默認是myisam,建表的時候也指定,例如: create table test(id int)engine=innodb;
2,如果是將INNODB改成MYISAM怎樣改?--------------------alter table test engine=myisam;
3,還有dos中的MYSQL,怎樣保存資料庫,表等對象?-----------------在dos中執行 create database databasename; create table test(id int);這樣就生成了庫和表;對應的系統文件在mysql的安裝目錄的data下,資料庫名對應一個文件夾。比如 create database testdb,那麼就能在data目錄下找到testdb目錄;表等對象的文件要看具體的引擎,如果是myisam引擎,那麼就會有三個文件,test.frm,test.myi,test.myd三個,innodb的話只有一個test.frm結構文件,數據和索引文件都在 ibdata1表空間里。
4,php如何和MYSQL連接?是否非要輸入代碼?有沒有別的簡單方法如ui式設置-------------------需要你寫連接信息,網上給你找了個php連接mysql的例子,你參考下
<?php
$mysql_server_name='localhost'; //改成自己的mysql資料庫伺服器
$mysql_username='root'; //改成自己的mysql資料庫用戶名
$mysql_password='198791'; //改成自己的mysql資料庫密碼
$mysql_database='mydb'; //改成自己的mysql資料庫名
㈤ mysql資料庫 myisam 表由哪些文件組成
表名.frm .MYD .MYI
frm 描述表結構 MYD保存表數據 MYI存儲表索引
㈥ mysql資料庫那些表適合mysiam哪些適合innodb
MyISAM 優化多個並發的讀/寫操作 ,適合一次寫入多次讀取操作,沒有事務安全,支持全文搜索
InnoDB給MySQL提供了具有提交,回滾和崩潰恢復能力的事務安全存儲引擎.InnoDB也支持外鍵(FOREIGN KEY)機制.
所以 MyISAM 適合讀書 新聞 論壇等網站,
而商城在線交易 或erp之類強調數據安全的的 站點 必須使用 InnoDB
㈦ mysql資料庫支持的存儲引擎有哪些默認的存儲引擎是什麼主要特性有什麼
1、MySQL常見的存儲引擎有:InnoDB、MyISAM。
2、Mysql 5.0之後的版本,默認的存儲引擎就是InnoDB。
3、各自主要特點有:
事務:MyISAM不支持,InnoDB支持。
鎖級別: MyISAM 表級鎖,InnoDB 行級鎖及外鍵約束。
MyISAM存儲表的總行數;InnoDB不存儲總行數。
MyISAM採用非聚集索引,B+樹葉子存儲指向數據文件的指針。InnoDB主鍵索引採用聚集索引,B+樹葉子存儲數據。
MyISAM適合場景: 插入不頻繁,查詢非常頻繁,如果執行大量的SELECT,MyISAM是更好的選擇, 沒有事務。
InnoDB適合場景: 可靠性要求比較高,或者要求事務; 表更新和查詢都相當的頻繁, 大量的INSERT或UPDATE。
㈧ MySQL資料庫中所支持的3個引擎有哪些
因此,ISAM執行讀取操作的速度很快,而且不佔用大量的內存和存儲資源。 ISAM的兩個主要不足之處在於,它不支持事務處理,也不能夠容錯:如果你的硬碟崩潰了,那麼數據文件就無法恢復了。如果你正在把ISAM用在關鍵任務應用程序里,那就必須經常備份你所有的實時數據,通過其復制特性,MySQL(和PHP搭配之最佳組合)能夠支持這樣的備份應用程序。 MyISAMMyISAM是MySQL(和PHP搭配之最佳組合)的ISAM擴展格式和預設的MySQL資料庫引擎。除了提供ISAM里所沒有的索引和欄位管理的大量功能,MyISAM還使用一種表格鎖定的機制,來優化多個並發的讀寫操作。其代價是你需要經常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間。 MyISAM還有一些有用的擴展,例如用來修復MySQL資料庫文件的MyISAMChk工具和用來恢復浪費空間的MyISAMPack工具。 HEAPHEAP允許只駐留在內存里的臨時表格。駐留在內存里讓HEAP要比ISAM和MyISAM都快,但是它所管理的數據是不穩定的,而且如果在關機之前沒有進行保存,那麼所有的數據都會丟失。在數據行被刪除的時候,HEAP也不會浪費大量的空間。HEAP表格在你需要使用SELECT表達式來選擇和操控數據的時候非常有用。要記住,在用完表格之後就刪除表格。讓我再重復一遍:在你用完表格之後,不要忘記刪除表格。 InnoDB和Berkley DB InnoDB和Berkley DB(BDB)資料庫引擎都是造就MySQL(和PHP搭配之最佳組合)靈活性的技術的直接產品,這項技術就是MySQL(和PHP搭配之最佳組合)++ API。在使用MySQL(和PHP搭配之最佳組合)的時候,你所面對的每一個挑戰幾乎都源於ISAM和MyISAM資料庫引擎不支持事務處理也不支持外來鍵。盡管要比ISAM和MyISAM引擎慢很多,但是InnoDB和BDB包括了對事務處理和外來鍵的支持,這兩點都是前兩個引擎所沒有的。如前所述源碼天空 ,如果你的設計需要這些特性中的一者或者兩者,那你就要被迫使用後兩個引擎中的一個了。