WEB开发网
开发学院数据库Oracle 为1.7亿张记录表创建快速索引 阅读

为1.7亿张记录表创建快速索引

 2007-05-10 12:16:25 来源:WEB开发网   
核心提示: 5)重复3,4两步,为1.7亿张记录表创建快速索引(4),估计这个是创建一个分区的索引需要解释一下的是,上面的sql只是我随机抓到的运行时间比较长的,SQL> Analyze index IDX_SUBMIT_RECORDTIME estimate statistics;Index

5)重复3,4两步,估计这个是创建一个分区的索引

需要解释一下的是,上面的sql只是我随机抓到的运行时间比较长的,整个create index过程会复杂很多,具体怎么样可以用sqltrace跟踪。这里主要看的是temp表空间的使用情况。

同时,在创建的过程中:

SQL> select segment_name,partition_name from user_segments where segment_name='IDX_SUBMIT_RECORDTIME';no rows selectedSQL> select index_name,partition_name from user_ind_partitions where INDEX_NAME='IDX_SUBMIT_RECORDTIME';no rows selected

当时忘了查user_segments中其实是有一个segment_name为一串数字的记录,那个才是正在创建的索引;如果这个事务失败了,将回滚。

最后耗时99分钟完成。

5. 创建完成后分析索引

但是接下来还有一件事。创建完成后要分析索引,否则就是走了索引,查询也巨慢无比。

SQL> explain plan for select count(*) from stat_submit_center where recordtime>trunc(sysdate);Explained.SQL> @?/rdbms/admin/utlxplp.sqlPLAN_TABLE_OUTPUT-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost | Pstart| Pstop |-------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 9 | 4 | | || 1 | SORT AGGREGATE | | 1 | 9 | | | || 2 | PARTITION RANGE ALL | | | | | 1 | 50 ||* 3 | INDEX FAST FULL SCAN| IDX_SUBMIT_RECORDTIME | 8878K| 76M| 4 | 1 | 50 |-------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------3 - filter("STAT_SUBMIT_CENTER"."RECORDTIME">TRUNC(SYSDATE@!))Note: cpu costing is off16 rows selected.SQL> set autotrace on explainSQL> set timing onSQL> select count(*) from stat_submit_center where recordtime>trunc(sysdate);aa^Cselect count(*) from stat_submit_center where recordtime>trunc(sysdate)*ERROR at line 1:ORA-01013: user requested cancel of current operationElapsed: 00:11:49.85SQL>SQL> set autotrace off

上面可以看到,因为没有分析索引,虽然它走的是新建的IDX_SUBMIT_RECORDTIME这个索引,但是查询巨慢,10分钟后也没有结果。下面我们分析一下。

SQL> Analyze index IDX_SUBMIT_RECORDTIME estimate statistics;Index analyzed.Elapsed: 00:00:06.84SQL> set autotrace on explainSQL> select count(*) from stat_submit_center where recordtime>trunc(sysdate);COUNT(*)----------926736Elapsed: 00:00:05.37Execution Plan----------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4360 Card=1 Bytes=9)1 0 SORT (AGGREGATE)2 1 PARTITION RANGE (ALL)3 2 INDEX (RANGE SCAN) OF 'IDX_SUBMIT_RECORDTIME' (NON-UNIQUE) (Cost=4360 Card=8878740 Bytes=79908660)SQL> set autotrace off

索引分析之后,查询时间在5分钟,效率大大提高。

上一页  1 2 3 4 

Tags:记录表 创建 快速

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接