Oracle堆组织表(heap organized table)
堆(heap)是一种得到深入研究的经典数据结构,Oracle将堆作为默认表类型(Oracle主要表类型有9种)。
“堆”是一组空间,在数据存储方面以某种随机方式被使用,数据可以存放在任何位置上。
Oracle索引组织表(index organized table/IOT)
以B*Tree结构存储,在组织数据时强制要求数据行有某种物理顺序,数据按照索引结构存储,通常根据主键有序存储在IOT中。
如:以用户ID为键将用户多个收货地址,安排到相邻物理位置上。
这样,一个用户所有收货地址都存储在一起,不会被随机安排在磁盘各个位置上。
Oracle聚簇索引
Oracle聚簇索引中聚簇是指:如果一组表有一些共同列,则将这组表存储在相同数据块中。
也就是说:聚簇是将一组表相关列上数据存储在同一块中,若一个块不能完成存储就用多个块。
如此,一组表中相关联列在物理上已经联在一起了(“预连接”),聚簇也可用于单个表。
Oracle中聚簇不是为了有序存储数据(这是IOT的工作),它是按某个键以聚簇方式存储数据。
如:在多个表关联查询中,表之间在物理上已经存在关联(“预连接”),查询效率会得到提升。
对关联查询操作很有帮助。
这是Oracle索引组织表(IOT)与聚簇索引的区别。
MySQL聚簇索引(innodb)
Mysql聚簇索引通常以主键为索引列,Mysql聚簇索引相当于Oracle中索引组织表。
Mysql聚簇索引将数据存放在B*Tree叶节点上,直接读取数据。
MySQL非聚簇索引B*Tree叶节点上,存放指向数据行指针。
MySQL聚簇索引不仅仅是一种索引类型,也是一种数据存储方式。
将相关数据安排在一起减少磁盘I/O,数据与索引都存放在B-Tree结构中。