資料庫引擎,主要的為:myisam與innodb。
兩種型別最主要的差別就是innodb 支援事務處理與外來鍵和行級鎖。
該引擎不支援fulltext型別的索引,而且它沒有儲存表的行數,當select count(*) from table時需要掃瞄全表。當需要使用資料庫事務時,該引擎當然是首選。由於鎖的粒度更小,寫操作不會鎖定全表,所以在併發較高時,使用innodb引擎會提公升效率。但是使用行級鎖也不是絕對的,如果在執行乙個sql語句時mysql不能確定要掃瞄的範圍,innodb表同樣會鎖全表。
myisam是mysql預設的引擎,但是它沒有提供對資料庫事務的支援,也不支援行級鎖和外來鍵,因此當insert(插入)或update(更新)資料時即寫操作需要鎖定整個表,效率便會低一些。不過和innodb不同,myisam中儲存了表的行數,於是select count(*) from table時只需要直接讀取已經儲存好的值而不需要進行全表掃瞄。如果表的讀操作遠遠多於寫操作且不需要資料庫事務的支援,那麼myiasm也是很好的選擇。
大尺寸的資料集趨向於選擇innodb引擎,因為它支援事務處理和故障恢復。資料庫的大小決定了故障恢復的時間長短,innodb可以利用事務日誌進行資料恢復,這會比較快。
myiasm引擎的索引結構
myisam引擎的索引結構為b+tree,其中b+tree的資料域儲存的內容為實際資料的位址,也就是說它的索引和實際的資料是分開的,只不過是用索引指向了實際的資料,這種索引就是所謂的非聚集索引。
myisam中索引檢索的演算法為首先按照b+tree搜尋演算法搜尋索引,如果指定的key存在,則取出其data域的值,然後以data域的值為位址,讀取相應資料記錄。
innodb引擎的索引結構
innodb的索引檔案本身就是資料檔案,即b+tree的資料域儲存的就是實際的資料,這種索引就是聚集索引。這個索引的key就是資料表的主鍵,因此innodb表資料檔案本身就是主索引。
兩者區別
1、innodb的資料檔案本身就是索引檔案。
2、innodb的所有輔助索引都引用主鍵作為data域
例如知道了innodb的索引實現後,就很容易明白為什麼不建議使用過長的字段作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。
再例如,用非單調的字段作為主鍵在innodb中不是個好主意,因為innodb資料檔案本身是一顆b+tree,非單調的主鍵會造成在插入新記錄時資料檔案為了維持b+tree的特性而頻繁的**調整,十分低效,而使用自增字段作為主鍵則是乙個很好的選擇。
mysql資料庫引擎 mysql資料庫引擎
資料庫引擎是用於儲存 處理和保護資料的核心服務。利用資料庫引擎可控制訪問許可權並快速處理事務,從而滿足企業內大多數需要處理大量資料的應用程式的要求。使用資料庫引擎建立用於聯機事務處理或聯機分析處理資料的關聯式資料庫。這包括建立用於儲存資料的表和用於檢視 管理和保護資料安全的資料庫物件 如索引 檢視和...
MySQL資料庫引擎
如果你是個賽車手並且按一下按鈕就能夠立即更換引擎而不需要把車開到車庫裡去換,那會是怎麼感覺呢?mysql資料庫為開發人員所做的就好像是按按鈕換引擎 它讓你選擇資料庫引擎,並給你一條簡單的途徑來切換它。mysql的自帶引擎肯定是夠用了,但是在有些情況下,其他的引擎可能要比手頭所用更適合完成任務。如果願...
mysql資料庫引擎
mysql資料庫引擎 資料庫引擎是在我們編譯安裝mysql的時候確定下來的。也就是說如果我們想換乙個資料庫引擎,也就要重新編譯mysql。我們也可以使用mysql和api來編譯我們自己的資料庫引擎,當然這個是建立在你對資料庫底層非常了解的地步。所以我們想要新增乙個新的資料庫引擎的時候,那麼就編譯吧。...