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 <tablename> 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 <table name> move compress;
123