數據庫引擎——MyisAM和Innodb

1、區別

MyisAm Innodb
非聚集 聚集
可以沒有主鍵 必須有主鍵
表級鎖 行級鎖(針對索引)
data域存的是數據項的地址 data域存的是數據本身
不支持事務 支持事務
支持全文索引 不支持全文索引
保存表的總行數(帶where時失效,有索引走索引) 逐行掃描獲取總數(有索引也走索引)

InnoDB這種行鎖實現特點意味着:只有通過索引條件檢索數據,innoDB才使用行級鎖,否則InnoDB將使用表鎖,在實際開發中應當注意。

通過聚集索引可以查到需要查找的數據, 而通過非聚集索引可以查到記錄對應的主鍵值 , 再使用主鍵的值通過聚集索引查找到需要的數據

2、innodb爲什麼要用自增id作爲主鍵:

如果表使用自增主鍵,那麼每次插入新的記錄,記錄就會順序添加到當前索引節點的後續位置,當一頁寫滿,就會自動開闢一個新的頁。
如果使用非自增主鍵(如果身份證號或學號等),由於每次插入主鍵的值近似於隨機,因此每次新紀錄都要被插到現有索引頁中間的某個位置,導致其他數據頻繁的移動到其他頁中、分頁操作造成了大量的碎片,得到了不夠緊湊的索引結構,後續不得不通過OPTIMIZE TABLE(optimize table)來重建表並優化填充頁面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章