堆组织表(hot)和索引组织表(iot)
时间:2010-10-08 来源:shawn53
myisam使用的堆组织表(Heap Organize Table, HOT)使用B-tree索引的存储格式,显示都是随机顺序。
innodb表是索引组织表(Index Organized Table, IOT),它的索引则是采用 clustered index 方式,因此主键会按照顺序存储,每次有记录有更新时,会重新整理更新其主键。因此无论是直接从 myisam 表转换过来的,还是后来插入的记录,显示时都会按照主键的顺序。
mysql> select * from duplicate_key;
+----+------+
| id | p_id |
+----+------+
| 2 | 2 |
| 3 | 3 |
| 5 | 5 |
| 4 | 4 |
| 6 | 6 |
| 7 | 7 |
+----+------+
6 rows in set (0.00 sec)
此时的duplicate_key表是myisam引擎的,
update duplicate_key set id=id-1的时候会提示Duplicate entry '4' for key 'PRIMARY'错误。
update duplicate_key set id=id-1 order by id;如果这样做,就不会出错,原理上面已做出了说明。
如果是innodb引擎就不会出现这样的情况,因为他的聚集索引存储方式会按顺序来显示。
3:在myisam引擎使用的时候如果你delete了其中的几条数据,这时的表就是一个hole表。
如果你不使用表维护命令进行维护,你新插入的数据就会放到你刚刚删除的那个位置。如果不够清楚,乐于详细解答。