慎用堆表

有时候我们常常为了使用方便,省略建主键的建表方式。

因为很多时候,这些数据来自于外部,而且数量和增长不会很大。

 

比如是一些存储过程刷新出来的结果集。

 

那么我们就会建一个堆表。什么是堆表?

就是没有主键,也没有索引的表。

 

堆表在创建以后,数据库会以最快地速度把数据插入到磁盘中。在这个过程中,会产生磁盘碎片,数据分散的情况。

这样会大大地降低数据密度。

什么意思呢?

就是说在SELECT表T,要扫描扇区A的时候,只有10%的数据是表T的,但是为了那10%的数据,要扫描多90%不必要的数据。

我们不介意搜索引擎对表T进行全表扫描,但是数据碎片化对于数据库性能,还有磁盘性能都有很大的隐患。

 

所以,无论什么样的表,都要做成聚簇表,索引表。

也就是有索引,有主键的表。

 

稍微对比一下堆表和索引表

堆表(heap table)数据插入时时存储位置是随机的,主要是数据库内部块的空闲情况决定,获取数据是按照命中率计算,全表扫表时不见得先插入的数据先查到。

 

索引表(iot)数据存储是把表按照索引的方式存储的,数据是有序的,数据的位置是预先定好的,与插入的顺序没有关系。

 

索引表的查询效率逼堆表高(相当于查询索引的效率),插入数据的速度比堆表慢。

  

 

 

 

你可能感兴趣的:(数据库,堆表)