`
wsql
  • 浏览: 11822456 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

如何加快建 index 索引 的时间

 
阅读更多

朋友在500w的表上建索引,半个小时都没有结束。所以就讨论如何提速。


一.先来看一下创建索引要做哪些操作:
1.indexkeydata读到内存
==>如果data没在db_cache中,这时候很容易有大量的dbfilescatterreadwait

2.indexkeydata作排序
==>sort_area_size或者pga_aggregate_target不够大的情况下,需要做disksort,会有大量的driectpathread/write,另外,消耗大量CPUTime

3.创建新的indexsegment,把排过序的indexdata写到所创建的indexsegment里面
==>如果index很大,那么,有时也会有redolog相关等待,如:
logbufferspace,logfilesync,logfileparallelwrite

所以,在建大表索引时,可以增大pga,增大temptablepace,并且用nologging或并行选项。

如:
createindexidx_logsonlogs(time)nologgingparallel4;

并行度一般看CPU个数。当然在CPU比较空闲的情况下可以多并行几个。对于单CPU不建议用并行,这样反而会增加创建时间。也可以根据v$session_wait的资料,做针对性的tuning,这样可以降低点时间

补充知识:

查看cpu信息:more/proc/cpuinfo

查看内存信息:more/proc/meminfo

查看操作系统信息:more/etc/issue

有关索引概念性的东西,请参考我的Blog

Oracle索引详解

http://blog.csdn.net/xujinyang/article/details/6829641

二.测试

自己也测试了下。测试环境:Oracle11gR2,win764bit,CPUT66702.2G双核,内存:4G

1.查看表的数据量:

SQL>selectcount(*)fromcustaddr;

COUNT(*)

----------

7230464

2.查看现有索引:

SQL>selectindex_name,index_typefromuser_indexeswheretable_name='CUSTADDR';

INDEX_NAMEINDEX_TYPE

---------------------------------------------------------

PK_CUSTADDR_TP_723NORMAL

IX_CUSTADDR_ADDRABB_TPNORMAL

IX_CUSTADDR_TEAMID_TPNORMAL

IX_CUSTADDR_CUSTID_TPNORMAL

IX_CUSTADDR_COMPABB_TPNORMAL

IX_CUSTADDR_AREACODENORMAL

IX_CUSTADDR_ADDR_TPNORMAL

已选择7行。

3.删除索引:IX_CUSTADDR_CUSTID_TP


SQL>dropindexIX_CUSTADDR_CUSTID_TP;

索引已删除。

4.默认方式创建索引:


SQL>SETtimingon;

SQL>CREATEINDEXIX_CUSTADDR_CUSTID_TPONCUSTADDR(CUSTID);

索引已创建。

已用时间:00:00:48.37

单位:s

5.nologging模式:
SQL>dropindexIX_CUSTADDR_CUSTID_TP;

索引已删除。

已用时间:00:00:00.09
SQL>CREATEINDEXIX_CUSTADDR_CUSTID_TPONCUSTADDR(CUSTID)NOLOGGING;

索引已创建。

已用时间:00:00:34.46

6.Nologging+parallel模式

SQL>dropindexIX_CUSTADDR_CUSTID_TP;

索引已删除。

已用时间:00:00:00.17

SQL>CREATEINDEXIX_CUSTADDR_CUSTID_TPONCUSTADDR(CUSTID)NOLOGGINGPARALLEL2;

索引已创建。

已用时间:00:00:52.56

SQL>dropindexIX_CUSTADDR_CUSTID_TP;

索引已删除。

已用时间:00:00:00.07

SQL>CREATEINDEXIX_CUSTADDR_CUSTID_TPONCUSTADDR(CUSTID)NOLOGGINGPARALLEL4;

索引已创建。

已用时间:00:00:53.44

看来在单CPU上,并行效果还不好.

7.Parallel模式

SQL>dropindexIX_CUSTADDR_CUSTID_TP;

索引已删除。

已用时间:00:00:00.02

SQL>CREATEINDEXIX_CUSTADDR_CUSTID_TPONCUSTADDR(CUSTID)PARALLEL2;

索引已创建。

已用时间:00:00:49.97

SQL>dropindexIX_CUSTADDR_CUSTID_TP;

索引已删除。

已用时间:00:00:00.02

SQL>CREATEINDEXIX_CUSTADDR_CUSTID_TPONCUSTADDR(CUSTID)PARALLEL4;

索引已创建。

已用时间:00:00:50.25


从上面的测试数据可以看出,700万的数据,建索引,也在1分钟以内。但是并行在单CPU上效果不明显,而且比光使用NOLOGGING还要慢,因为出现资源争用了,可能是CPU的争用,也可能是I/O的争用。

------------------------------------------------------------------------------

分享到:
评论

相关推荐

    ORACLE重建索引总结

    3、以删除的叶节点数量:指得是数据行的delete操作从逻辑上删除的索引节点 的数量,要记住oracle在删除数据行后,将 “ 死 “ 节点保留在索引中,这样做可以加快sql删除操作的速度,因此oracle删除数据行后可以不必...

    怎样正确创建MySQL索引的方法详解

    索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本。MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的。MySQL提供了Explain,...

    mysql下普通索引和唯一索引的效率对比

     普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择...

    数据库系统概论chp3-2.pptx

    索引的分类 如果以存储结构来区分,则有"聚集索引"(Clustered Index,也称聚类索引、簇集索引)和"非聚集索引"(Nonclustered Index,也称非聚类索引、非簇集索引)的区别; 如果以数据的唯一性来区别,则有"唯一...

    SQL Server索引的四个高级特性

     有一些索引非常低效的,比如经常查询状态为进行中的订单,订单有99%的状态是完成,1%是进行中 ,因此我们在订单状态字段上建了一个索引,性能是提高了,但是感觉索引中保存了99%的完成状态数据是永远不会查询到的...

    SQL Server数据库查询速度慢原因及优化方法

    8、如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引,耗空间。 like ''a%'' 使用索引 like ''%a'' 不使用索引用 like ''%a%'' 查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是...

    SQLite3 轻量级数据库及SQL语法指导

    删除索引: drop index 索引名(索引是不可更改的,想更改必须删除重新建) 删除数据: delete from 表名; 更新数据: update 表名 set 字段=’修改后的内容’ where 条件; 增加一个列: Alter table 表名 add column ...

    freemarker总结

    item_index:当前变量的索引值 item_has_next:是否存在下一个对象 也可以使用指令跳出迭代 例子如下: ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x> ${x_index + 1}.${x}, ...

    浅谈数据库优化方案

    本文为大家分享了数据库优化方案,供大家参考,具体内容如下 1. 利用表分区 分区将数据在物理上分隔开,不同分区的数据可以制定保存在处于不同磁盘上的数据文件里。...3. 索引Index的优化设计 索引

    MYSQL培训经典教程(共两部分) 2/2

    MYSQL高级特性 81 4.1 集合函数 82 4.1.1 行列计数 82 4.1.2...时间 92 4.3 字符串模式匹配 93 4.3.1 标准的SQL模式匹配 93 4.3.2 扩展正则表达式模式匹配 94 4.3.3 总结 96 4.4 深入SELECT...

    MYSQL培训经典教程(共两部分) 1/2

    MYSQL高级特性 81 4.1 集合函数 82 4.1.1 行列计数 82 4.1.2...时间 92 4.3 字符串模式匹配 93 4.3.1 标准的SQL模式匹配 93 4.3.2 扩展正则表达式模式匹配 94 4.3.3 总结 96 4.4 深入SELECT...

    ORACLE9i_优化设计与系统调整

    §5.1.1 响应时间与吞吐量的折衷 82 §5.1.2 临界资源 83 §5.1.3 过度请求的影响 83 §5.1.4 调整以解决问题 83 §5.2 优化的执行者 84 §5.3 设置性能目标 84 第7章 系统优化方法 85 §6.1 何时优化效率最高 85 §...

    SEO编程PHP中文版

    2.2.4 基于时间的因素 2.2.5 外部因素 2.3 可能的搜索引擎惩罚 2.3.1 Google沙盒效应 2.3.2 过期域名惩罚 2.3.3 重复内容惩罚 2.3.4 Google补充索引 2.4 资源和工具 2.4.1 Web分析器 2.4.2 市场研究 2.4.3...

    oracle详解

    而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。例如:imp userid=test1/test1 file=expdat.dmp fromuser=...

    数据库基础实验的实验报告附图

    10. 用SQL语言CREATE INDEX语句定义表STUDENT的SNAME字段的降序索引; 11. 用SQL语言CREATE INDEX语句定义表SC的GRADE字段的升序索引; 12. 用SQL语言DROP语句删除索引; 13. 输入部分数据,并试着修改其中的错误; 注...

    Oracle 10g 开发与管理

    (2)在原来已有表上建一个新表(结构和数据) 27 (3)使用OEM建表 27 3.默认值和NULL值 27 三. 修改表 28 四. 删除表 28 五. 数据完整性 28 1.Primary Key 约束 28 2.NOT NULL约束 29 3.Unique 约束 29 4....

    mysql数据库的基本操作语法

    通常先建主表,然后再建从表,这样从表的参照引用的表才存在。 表级别创建外键约束: create table student( id int auto_increment primary key, name varchar(25), classes_id int, foreign key(classes_id) ...

    Jhonny_Lin_Portfolio

    链接到已部署的站点单击链接转到已部署的网站: : 投资组合进度该产品组合仍在开发中,随着我花更多时间学习编码和开发新网站,内容将被添加或更改。 所有这些都将添加到网站上,以供其他人查看。 1.1版本向我的...

    超实用sql语句

    注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 ...

    经典SQL语句大全

    注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 ...

Global site tag (gtag.js) - Google Analytics