資料庫引擎是用於儲存、處理和保護資料的核心服務。
利用資料庫引擎可控制訪問許可權並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。
使用資料庫引擎建立用於聯機事務處理或聯機分析處理資料的關聯式資料庫。
包括建立用於儲存資料的表和用於檢視、管理和保護資料安全的資料庫物件(如索引、檢視和儲存過程)。
1、 儲存結構
myisam:每個myisam在磁碟上儲存成三個檔案。第乙個檔案的名字以表的名字開始,副檔名指出檔案型別。
.frm (檔案儲存表定義)innodb:所有的表都儲存在同乙個資料檔案中,innodb表的大小只受限於作業系統檔案的大小,一般為2gb。myd(mydata,儲存資料檔案)
myi(myindex,儲存索引檔案)
2、 可移植性、備份及恢復
myisam:資料是以檔案的形式儲存,所以在跨平台的資料轉移中會很方便。在備份和恢復時可單獨針對某個表進行操作。
innodb:免費的方案可以是拷貝資料檔案、備份 binlog,或者用 mysqldump,在資料量達到幾十g的時候就相對痛苦了。
3、 事務支援
myisam:強調的是效能,每次查詢具有原子性,其執行速度比innodb型別更快,但是不提供事務支援。
innodb:提供事務支援事務,外來鍵等高階資料庫功能。 具有事務、回滾(rollback)和崩潰修復能力的事務安全型表。(事務的特性:原子性,一致性,隔離性,永續性)。
4、 聯合索引
myisam:可以和其他字段一起建立聯合索引。引擎的自動增長列必須是索引,如果是組合索引,自動增長可以不是第一列,他可以根據前面幾列進行排序後遞增。
innodb:innodb中必須包含只有該字段的索引。引擎的自動增長列必須是索引,如果是組合索引,自動增長也必須是組合索引的第一列。
5、 表鎖差異
myisam:只支援表級鎖,使用者在操作myisam表時,select,update,delete,insert語句都會給表自動加鎖,如果加鎖以後的表滿足insert併發的情況下,可以在表的尾部插入新的資料。
innodb:支援事務和行級鎖,是innodb的最大特色。行鎖大幅度提高了多使用者併發操作的新能。但是innodb的行鎖,只是在where的主鍵是有效的,非主鍵的where都會鎖全表的。
6、 全文索引
myisam:支援 fulltext型別的全文索引
innodb:不支援fulltext型別的全文索引,但是innodb可以使用sphinx外掛程式支援全文索引,並且效果更好。
7、 表主鍵
myisam:允許沒有任何索引和主鍵的表存在,索引都是儲存行的位址。
innodb:如果沒有設定主鍵或者非空唯一索引,就會自動生成乙個6位元組的主鍵(使用者不可見),資料是主索引的一部分,附加索引儲存的是主索引的值。
8、 表的具體行數
myisam:儲存有表的總行數,如果select count() from table;會直接取出出該值。
innodb:沒有儲存表的總行數,如果使用select count() from table;就會遍歷整個表,消耗相當大,但是在加了where條件後,myisam和innodb處理的方式都一樣。
9、 curd操作
myisam:如果執行大量的select,myisam是更好的選擇。
innodb:如果你的資料執行大量的insert或update,出於效能方面的考慮,應該使用innodb表。delete 從效能上innodb更優,但delete from table時,innodb不會重新建立表,而是一行一行的刪除,在innodb上如果要清空儲存有大量資料的表,最好使用truncate table這個命令。
10、 是否支援外來鍵
innodb支援外來鍵(外來鍵的定義:乙個表的外來鍵是另一張表的主鍵。將兩張表聯絡到一起。)
myisam不支援。
對乙個包含外來鍵的innodb表轉為myisam會失敗;
1、檢視當前資料庫支援的引擎和預設的資料庫引擎:
2、更改資料庫引擎
2.1、修改配置檔案my.ini
將my-small.ini另存為my.ini,在[mysqld]後面新增default-storage-engine=innodb,重啟服務,資料庫預設的引擎修改為innodb。
2.2、在建表時指定
2.3、建表後更改
3、檢視修改結果
方式1:
方式2:
myisam索引結構: myisam索引用的b+ tree來儲存資料,myisam索引的指標指向的是鍵值的位址,位址儲存的是資料。
b+tree的資料域儲存的內容為實際資料的位址,也就是說它的索引和實際的資料是分開的,只不過是用索引指向了實際的資料,這種索引就是所謂的非聚集索引。
因此,過程為: myisam中索引檢索的演算法為首先按照b+tree搜尋演算法搜尋索引,如果指定的key存在,則取出其data域的值,然後以data域的值為位址,根據data域的值去讀取相應資料記錄。
也是b+treee索引結構。innodb的索引檔案本身就是資料檔案,即b+tree的資料域儲存的就是實際的資料,這種索引就是聚集索引。這個索引的key就是資料表的主鍵,因此innodb表資料檔案本身就是主索引。
innodb的輔助索引資料域儲存的也是相應記錄主鍵的值而不是位址,所以當以輔助索引查詢時,會先根據輔助索引找到主鍵,再根據主鍵索引找到實際的資料。所以innodb不建議使用過長的主鍵,否則會使輔助索引變得過大。
建議使用自增的字段作為主鍵,這樣b+tree的每乙個結點都會被順序的填滿,而不會頻繁的**調整,會有效的提公升插入資料的效率。
上圖,可以看到葉節點包含了完整的資料記錄。這種索引叫做聚集索引。因為innodb的資料檔案本身要按主鍵聚集,所以innodb要求表必須有主鍵(myisam可以沒有),如果沒有顯式指定,則mysql系統會自動選擇乙個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則mysql自動為innodb表生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形。
而且,與myisam索引的不同是innodb的輔助索引data域儲存相應記錄主鍵的值而不是位址。換句話說,innodb的所有輔助索引都引用主鍵作為data域。
因此,過程為:將主鍵組織到一棵b+樹中,而行資料就儲存在葉子節點上,若使用」where id = 13」這樣的條件查詢主鍵,則按照b+樹的檢索演算法即可查詢到對應的葉節點,之後獲得行資料。若對name列進行條件搜尋,則需要兩個步驟:第一步在輔助索引b+樹中檢索name,到達其葉子節點獲取對應的主鍵。第二步使用主鍵在主索引b+樹種再執行一次b+樹檢索操作,最終到達葉子節點即可獲取整行資料。
1、是否要支援事務,如果要請選擇innodb,如果不需要可以考慮myisam
2、如果表中絕大多數都只是讀查詢,可以考慮myisam,如果既有讀寫也挺頻繁,請使用innodb。
3、系統崩潰後,myisam恢復起來更困難,能否接受;
4、mysql5.5版本開始innodb已經成為mysql的預設引擎(之前是myisam),說明其優勢是有目共睹的,如果你不知道用什麼,那就用innodb,至少不會差。
5、儲存引擎主要有: 1. myisam , 2. innodb, 3. memory, 4. blackhole, 5. csv, 6. performance_schema, 7. archive, 8. federated , 9 mrg_myisam
mysql資料庫引擎 mysql資料庫引擎
資料庫引擎是用於儲存 處理和保護資料的核心服務。利用資料庫引擎可控制訪問許可權並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。使用資料庫引擎建立用於聯機事務處理或聯機分析處理資料的關聯式資料庫。這包括建立用於儲存資料的表和用於檢視 管理和保護資料安全的資料庫物件 如索引 檢視和...
MySQL資料庫引擎
如果你是個賽車手並且按一下按鈕就能夠立即更換引擎而不需要把車開到車庫裡去換,那會是怎麼感覺呢?mysql資料庫為開發人員所做的就好像是按按鈕換引擎 它讓你選擇資料庫引擎,並給你一條簡單的途徑來切換它。mysql的自帶引擎肯定是夠用了,但是在有些情況下,其他的引擎可能要比手頭所用更適合完成任務。如果願...
mysql資料庫引擎
mysql資料庫引擎 資料庫引擎是在我們編譯安裝mysql的時候確定下來的。也就是說如果我們想換乙個資料庫引擎,也就要重新編譯mysql。我們也可以使用mysql和api來編譯我們自己的資料庫引擎,當然這個是建立在你對資料庫底層非常了解的地步。所以我們想要新增乙個新的資料庫引擎的時候,那麼就編譯吧。...