oracle上针对表的操作性能优化

1.如何从大表中快速查询数据
如何从几十亿的表中高效地查询几百条数据?
(1)如果是Oracle数据库的话,首先我们可以将表改成分区表,配合建立分区索引,效率是非常的快的,如果将普通表改成分区表,用Oracle的在线重定义包 dbms_redefinition就可以实现;
(2)如果这个表一般不插入数据的话,只供查询的话,我们还可以将表压缩,改成收缩表压缩后插入效率很低,不过查询效率很高;
(3)如果是其他的数据库的话,如sybase的话,只能定义一些索引了,并且索引要放在不同的segment里面,防止查询的时候I/O争用的情况出现,降低查询效果
总的来说,1亿条数据不多,还是比较好处理的,我这边的表多大几十亿都照样查询,还有要提醒的是,一个表的数据,我们不能让它一直增加,要对表做一下数据迁移的策略,
比如定时将表的数据迁到其他的历史表里面去。

2.如何快速删除数据
如:从一个数据量有1亿的表中删除3000万条记录,怎样比较快。
(1)建一个新表,把不需要删除的数据select出来放进去,然后把原表删除truncate,然后重命名,重建索引
用delete的话半天都跑不完的;
(2)建立分区,将需要删除的数据存在特定分区里,删除该分区就可以了。alter table 表名 drop partition 分区名

3.oracle快速删除一个字段,但是表里有千万条数据。
如果仅仅是不需要这个字段,可以执行:
alter table tablename set unused column column_name
然后再在空闲的时候执行:
alter table tablename drop unused columns;

4.如何定位重要(消耗资源多)的SQL
使用CPU多的用户session
SELECT a.SID, spid, status, SUBSTR (a.program, 1, 40) prog, a.terminal,a.SQL_TEXT, osuser, VALUE / 60 / 100 VALUE
FROM v s e s s i o n a , v session a, v sessiona,vprocess b, v$sesstat c
WHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr = b.addr
ORDER BY VALUE DESC;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值