myisam、innodb區別
l myisam型別不支援事務處理等高階處理,而innodb型別支援。
l myisam表不支援外來鍵,innodb支援
l myisam鎖的粒度是表級,而innodb支援行級鎖定。
l myisam支援全文型別索引,而innodb不支援全文索引。(mysql 5.6後innodb支援全文索引)
myisam相對簡單,所以在效率上要優於innodb,小型應用可以考慮使用myisam。當你的資料庫有大量的寫入、更新操作而查詢比較少或者資料完整性要求比較高的時
候就選擇innodb表。當你的資料庫主要以查詢為主,相比較而言更新和寫 入比較少,並且業務方面資料完整性要求不那麼嚴格,就選擇mysiam表。
myisam索引實現
myisam索引檔案和資料檔案是分離的,索引檔案僅儲存資料記錄的位址。
l 主索引
myisam引擎使用b+tree作為索引結構,葉節點的data域存放的是資料記錄的位址。
l 輔助索引
在myisam中,主索引和輔助索引(secondary key)在結構上沒有任何區別,只是主索引要求key是唯一的,而輔助索引的key可以重複。
myisam中索引檢索的演算法為首先按照b+tree搜尋演算法搜尋索引,如果指定的key存在,則取出其data域的值,然後以data域的值為位址,讀取相應資料記錄。
myisam的索引方式也叫做「非聚集」的,之所以這麼稱呼是為了與innodb的聚集索引區分。
然innodb也使用b+tree作為索引結構,但具體實現方式卻與myisam截然不同.
l 主索引
innodb表資料檔案本身就是主索引。
innodb主索引(同時也是資料檔案)的示意圖,可以看到葉節點包含了完整的資料記錄。這種索引叫做聚集索引。因為innodb的資料檔案本身要按主鍵聚集,所以innodb要求表必須有主鍵(myisam可以沒有),如果沒有顯式指定,則mysql系統會自動選擇乙個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則mysql自動為innodb表生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形。
l 輔助索引
innodb的所有輔助索引都引用主鍵作為data域。
聚集索引這種實現方式使得按主鍵的搜尋十分高效,但是輔助索引搜尋需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然後用主鍵到主索引中檢索獲得記錄。
不同儲存引擎的索引實現方式對於正確使用和優化索引都非常有幫助,例如知道了innodb的索引實現後,就很容易明白
1、為什麼不建議使用過長的字段作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。再例如,
2、用非單調的字段作為主鍵在innodb中不是個好主意,因為innodb資料檔案本身是一顆b+tree,非單調的主鍵會造成在插入新記錄時資料檔案為了維持b+tree的特性而頻繁的**調整,十分低效,而使用自增字段作為主鍵則是乙個很好的選擇。
innodb索引和myisam索引的區別:
l 一是主索引的區別,innodb的資料檔案本身就是索引檔案。而myisam的索引和資料是分開的。
mylsam儲存優化:
禁用索引
alter table table_name disable keys
alter table table_name enable keys
禁用唯一性檢查:
禁用語句:set unique_checks=0
開啟語句:set unique_checks=1
批量插入資料:
使用load data infile 語句比insert 語句速度快
innodb優化:
禁用唯一檢查:
禁用語句:set unique_checks=0
開啟語句:set unique_checks=1
禁用外來鍵檢查:
禁用:set foreign_key_checks=0
開啟:set foreign_key_checks=1
禁止自動提交:
禁用:set autocommit=0
開啟:set autocommit=1
資料庫儲存引擎
mysql中提到了儲存引擎這個概念。簡而言之,儲存引擎就是表的型別。資料庫的儲存引擎決定了表在計算機中的儲存方式。show engines語句可以檢視mysql資料庫支援的儲存引擎。innodb儲存引擎給mysql的表提供了事物,回滾,崩潰修復和多版本併發控制的事物安全。innodb是mysql上第...
資料庫儲存引擎
儲存引擎 處理表的處理器 1 基本操作 1 檢視所有的儲存引擎 show engines 2 檢視已有表的儲存引擎 show create table 表名 engine innodb 3 建立表時指定儲存引擎 create table 表名 engine myisam 4 工作中常用儲存引擎 in...
資料庫儲存引擎
資料庫引擎簡單來說就是乙個 資料庫發動機 當你訪問資料庫時,不管是手工訪問,還是程式訪問,都不是直接讀寫資料庫檔案,而是通過資料庫引擎去訪問資料庫檔案。以關係型資料庫為例,你發sql語句給資料庫引擎,資料庫引擎解釋sql語句,提取出你需要的資料返回給你。因此,對訪問者來說,資料庫引擎就是sql語句的...