海量数据库解决方案
1、数据和索引分别独立存储的数据存储结构具有非常重要的意义。
2、设置充足的空余空间是提高数据处理效率的重要技术手段之一。
3、如果表中行的存储顺序与我们经常读取较大范围行的顺序一致,则就能够在很大程度上提高读取效率。
4、写入数据时轻而易举的对其进行了存储,在查询数据时就会花费更多的时间和精力。反之亦然。
5、在利用索引读取堆表数据时,代价较大的地方并不在于对索引的扫描上,而是在利用索引rowid对分散数据的随机读取。而索引组织表也正式由于降低了这部分的代价,才是的它在处理大范围数据中能够获得卓越的效率。
6、在堆表中索引和表示分开存储的,所以即使索引块被分割,rowid也不会发生变化。但在索引组织表中,犹豫索引和表是一个整体,所以当索引快被分割,rowid会随着行的移动而变化。
7、在B-tree中只允许每个块的2/3空间用来存储键值,所以当块中数据超过这个限制时,键值就会被分割到两个块中,所以索引组织表的数据无法拥有永久的物理地址。
8、索引组织表的rowid是一个可能的物理地址,利用这个寻找到对应行的可能行非常大,称之为PhysicalGuess。如果使用逻辑rowid找到正确数据行的命中率非常低,则说明根本不应选择索引组织表。适用情况:
.电子分类或关键字查询表
.代码信息表
.索引表
.空间信息管理表
.大部分使用主键查询的表
.OLAP维度表
.记录的长度相对较短,切插入操作不频繁发生的表。
9、对海量数据处理而言最具有价值的就是聚簇。
10、聚簇表之所以能提高读取效率,是因为只要读取一个索引行就能够连续读取多个数据行。除此之外与一般索引相比没有其他差异。
11、复合表聚簇是在一个单位聚簇中存储两个或两个以上的表聚簇结构。提高表的连接效率。
12、哈希聚簇的特征:
.SIZE,HASHKEYS,HASHIS等参数不允许修改。
.只能通过=比较运算符读取数据
.创建聚簇的同时存储空间也分配。
.当插入的行所需要的空间比其所属的单位聚簇空间大时,多出的行被存储在溢出区中。
.如果列值没有被平均分布,则哈希键值容易发生冲突。
.直接使用由哈希函数计算出来的值来读取数据的方法比使用索引的方法更加有效。
.其他特征几乎和索引聚簇相同。
.哈希聚簇的适用范围:
.尽量不要在数据以大量的形式连续不断增加的表中使用。
.如果查询条件中只是用了=运算,则有很好的效果。
.在聚簇列值分布不均等的情况下,容易导致出现溢出或键值之间冲突的现象。
.仅限于小型代码表,邮政编码表,系统用户信息表等。
.把大量数据存储在一定量的哈希聚簇中的升级概念就是hash分区。在拥有大量数据,增加速度非常快,大部分比较运算符都是=的表中,灵活使用hash分区很大程度可以提高读取效率。