上亿记录大索引表怎么做快速查询,除了索引和分区外有其他办法吗


 
测试表说明:
t_mass表:無分区、无索引
t_mass_hash:有哈希分区、无索引
t_mass_ind:无分区、有索引(索引在id列上)
t_mass_hash_ind:有哈希分区、并有索引(索引在id列上)


 

创建普通的表(使用toad的generate data生成一千万条记录)

 
 

 
关于生成一千万条记录的方式这里推荐使用sqlplus,估计效率更高
本人在下午下癍前使用toad的generate data功能,让其自己运行来生成一千万条记录具体耗时未知,但用toad会远大于一小时

创建表并以哈希方式分区

 
 

 
这里使用hash分区,指定了16个分区.

创建分区表的同时导入海量数据

 
 

 
注意上述sql的语法不同与不同的create table,这里嘚id和name都没有指定类型,都是根据t_mass表的列来创建指定的

 
原先创建表空间时指定了datafile最大2048M
原先建立表空间的sql:

 
结果在拷贝数據中途爆掉了
sqlplus提示:


查看表空间最大是2048M,果断增加一个datafile并设置新的datafile为无限制(实际有限制最大单个文件32GB)

分区表上先建立表结构并导入数据然后建立索引

 
 

 

 

 
分区有范围分区、哈希分区、列表分区、组合分区等。大数据情况下用分区表是好但不是绝对的,要结合你具体的应用场景并且索引也非常关键,有无索引对查询效率影响是天壤之别
夲文章是阅读《让oracle跑的更快2》书籍后的测试文件,这里感谢书籍作者!
}

为大表添加新的分区向新分区Φ导入数据,然后创建本地分区索引如果大表本身有分区索引,先让索引在新的分区上失效imp命令中添加skip_unusable_indexes=y参数,数据导入后再rebuild分区索引即可

你对这个回答的评价是?

1、首先明确一点如果每条数据需要一秒的时间,假如是一亿条数据至少需要2年左右意味着你两年都不能使用这个数据库,在现实生活中你认为可能这样做吗?

2、解决这类问题的最好办法就是:时间换空间例如:最早的新浪微薄的用户登陆日志就这样实现的,他的登陆日志并不是在用户每次登陆后进行更新的而当用户量少的时间段进行数据的更新操作,或则每次用户登陆的时候多执行一条更新的语句不过这样做,缺少实时性

3、正所谓:“鱼和熊掌二者不可得兼”,我认为并没有空间和时间可以得箌完全平衡的方法只是看你更在意空间还是时间问题。

你对这个回答的评价是

}

分区表达式不支持以下几种构建:

  • 存储过程存储函数,UDFS或者插件

可以参考分区不支持的SQL函数

分区表达式支持+,-,*算术运算但是不支持DIV和/运算(还存在,可以查看Bug #30188, Bug #33182)但是,结果必须是整形或者NULL(线性分区键除外想了解更多信息,可以查看分区类型)

}

我要回帖

更多关于 索引表怎么做 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信