1、區別
MyisAm | Innodb |
---|---|
非聚集 | 聚集 |
可以沒有主鍵 | 必須有主鍵 |
表級鎖 | 行級鎖(針對索引) |
data域存的是數據項的地址 | data域存的是數據本身 |
不支持事務 | 支持事務 |
支持全文索引 | 不支持全文索引 |
保存表的總行數(帶where時失效,有索引走索引) | 逐行掃描獲取總數(有索引也走索引) |
InnoDB這種行鎖實現特點意味着:只有通過索引條件檢索數據,innoDB才使用行級鎖,否則InnoDB將使用表鎖,在實際開發中應當注意。
通過聚集索引可以查到需要查找的數據, 而通過非聚集索引可以查到記錄對應的主鍵值 , 再使用主鍵的值通過聚集索引查找到需要的數據
2、innodb爲什麼要用自增id作爲主鍵:
如果表使用自增主鍵,那麼每次插入新的記錄,記錄就會順序添加到當前索引節點的後續位置,當一頁寫滿,就會自動開闢一個新的頁。
如果使用非自增主鍵(如果身份證號或學號等),由於每次插入主鍵的值近似於隨機,因此每次新紀錄都要被插到現有索引頁中間的某個位置,導致其他數據頻繁的移動到其他頁中、分頁操作造成了大量的碎片,得到了不夠緊湊的索引結構,後續不得不通過OPTIMIZE TABLE(optimize table)來重建表並優化填充頁面。