oracle使用技巧

数据库相关-客户端

PL/SQL developer 

1. 记住密码     2.自动执行光标所在的SQL  3. SQL自动美化 

TNS串问题: 无法修改tnsnames.ora文件(加tns)时,可以使用:  1. export TNS_ADMIN=/home/xuhui/etc 在这个目录下写tnsnames.ora ;  2. sqlplus xuhui/xuhui123@  ' TNS连接串'

数据库相关- 中文问题

数据库的字符集:  1. 它是数据库创建的时候指定的  2. 创建后可以修改,但只能改“大”字符集(一般情况下不修改)

客户端的字符集: 1. 要<= 数据库的字符集  2.读出的与写入的相同(或>=)

中文字符集设置  : NLS_LANG = AMERICAN_AMERICA.zhgs16gbk

SELECT 语句

使用索引的条件: 1.  在这些情况下不会使用索引:不等于(!= , <>) ; is null; not like; is not null   ;  2.   在字段上作运算,不会用索引

例: 不使用索引  where to_char(log_time, 'yyyy-mm-dd')='2012-02-12'   ; 使用索引: where log_time >= truc(to_date( '2012-02-12','yyyy-mm-dd')) and log_time <  trunc(to_date( '2012-02-12','yyyy-mm-dd') +1)    因为在字段上做了运算

3.  in(...) , exists,  from table1,table2  效率一次从低到高

UPDATE优化和使用注意

1. 先备份数据( 安全,提高性能)  ; 2. 分批更新,小批量上传,防止锁表 (oracle行级锁); 3. 如果被更新的字段有索引,更新的数据量很大,先取消索引(前提这表只有你一个人在用); 4. 全表数据更新,如果表非常大,建议以创建新表的形式替代更新。

DELETE优化和使用注意

1. 分批提交,减少锁表时间,减轻回滚段压力;2. 大批量数据删除加上rownum < 1000(防止把回滚段全部占满); 3. 大批量删除,禁止中途ctrl+c ,或kill掉session   4. 大量数据删除后最好重建索引,分析表。

insert优化使用注意

1. 如果你想插入的速度快点,可以关闭redo log (alter table nologging;) ;   2. 使用/* +  append */暗示;3. 绑定变量,批量绑定,批量提交  ; 4. 如果表是静态,独占使用,可以去掉索引和其他相关约束;5. 大量灌入数据后要分析表  ; 6.使用SQL  load快速装载数据。

SQL loader

效率最高的装载方式; 装载参数:1. Control = [file_name]  2. Data=[file_name]  3.Log=[file_name]  4. Bad=[file_name]   5. Silent=[header,feedback,errors,discards,partitions]  6 . Errors=[number]   7.Skip_index_maintenance=true    8.Direct=Y   9. Parallel=Y

Control file:   1. 列的数据格式  2. 跳过某些列(FN FILLER) 3.序列怎么处理(SN sequence (max,1)) 4. 简单的处理函数

高性能的数据导出

1. exp 速度快,限制多,不建议使用   2. sqlplus     set array 1000   3. 程序导出文本:一次从服务器端fetch多行数据;  批量写数据,减少io次数 ; sqluldr(c语言写的程序);  ora2file.sql

Bulk  fetch               Forall

表分析

1. 我的表有索引为什么不用 : oracle sql优化方式 : 基于代价的优化和基于规则的优化;  2. 什么时候需要analyze表: 10G以上自动分析,不必手工分析 ; 新增大量数据;删除大量数据; 更新大量数据在索引字段

统计信息"造假"  : 应用场景: 表的数据在短时间激增,造成数据库判断错误,生成错误的统计信息。例如:下账时,账单表由账处导入账管的表中。导致前台应用大量超时。

原理: 1. 导出历史表的统计信息   2. 更新统计信息备份表相关字段(表名,和索引名) 3. 导入下一个账期的分表中

消除表的碎片(shrink)

1. 高水位线(High Water Mark -- HWM)  2. 怎样评估表的碎片水平   3. 回缩表操作 alter table table_name enable  row movement;      alter table table_name shrink space cascade;        4. 限制: 导致相关视图,存储过程失效; 不能对表的tablespace为手工管理的表空间执行

分区表(partion)

1.为什么用分区表: 大数据量的表,表的行数超过 > 几千万? 上亿  ; 一直增长的表,需要定期备份,删除。  2. 分区类型: 范围,列表,hash,集合   3. 查询条件带有分区键效率高       4. 分区表的常用操作: 创建,split  drop

表压缩

1. 什么情况下用表压缩: 数据插入后没有更新操作,只有查询; 表空间紧张; CDR表,账单表  2. 压缩比例50% 左右    3. 压缩表性能: 查询、删除数据会加速   4. 压缩操作  alter   table

  move  compress;


123

你可能感兴趣的:(oracle使用技巧)