数据库总结-oracle

来源:互联网 发布:淘宝柳丝模特 编辑:程序博客网 时间:2024/06/05 11:55

会话(session)

用户登录会产生会话,用户登出会结束会话

后台进程

必须的:
CKPT
RECO
可选择的:

内存结构

SGA(System Global Area):由所有服务进程和后台进程共享;
PGA(Program Global Area):由每个服务进程、后台进程专有;每个进程都有一个PGA。

实际应用须知

加字段会锁表!可以通过不指定默认值来不锁表。
加索引一定会锁表,生产环境下一般要正在系统非高峰期执行。
设计规范:
库名表名字段名索引名必须大写(数据库内部默认大写)
临时库,表名必须以tmp为前缀,并以日期为后缀。
备份表必须以bak为前缀
字符集统一使用utf-8
禁止在关系型数据库中存储图片,请存储在mogodb里。
超过五千万行要考虑分表。如果字段比较多,一两千万行就要考虑分表。
禁止从测试开发环境直接连生产数据库
禁止使用分区表,因为分区表的DML操作消耗太大
尽量不使用外键
单张索引数量不超过五个
联合索引字段数不超过五个
索引名里要包含所包括的字段名
索引只能建在小字段上
一个频繁进行insert和update的表,就别建索引了

基于成本
预估IO,内存,CPU消耗。一般来讲瓶颈在IO

基于规则
已经被淘汰。

基于选择性
已经被淘汰

全表锁表

通过rowid

共享sql语句
注意,笨蛋oracle会认为大小写不同的sql。这也是保持一致的必要性。

oracle采用自下而上的方式来解析where,所以,把选择性最大的字段放在后面。
禁止使用select *,因为oralce会访问数据字典找到所有字段。

使用trancate 代替delete全表,但是前者不可恢复。

尽可能多使用commit

count(1)比count(*)快,结果一致,而count(colname)不包含对该列null值的统计。有主键的话最推荐的是count(主键)。当然count(索引键)也行,但是索引键可能为null,所以和count(1)结果可能不同。

避免使用having子句,having语句一定会引发排序

避免使用not in ,使用not exist 和外连接。

exist 或者group by代替distinct

唯一索引会进行唯一性扫描。
索引全所描
索引快速全扫描 不排序

order by 后的字段最好有索引。如果是唯一性索引最好,省略了所有排序过程。

使用索引不得使用函数,如果一定要这样,可以在建索引时使用函数索引。

使用UNION ALL代替or,或者使用IN代替OR

索引不存储null值,在索引上进行null值判断将导致全表扫描

UNION会排序和去重,如果没有这个需求,使用UNION ALL而非UNION

大于小于都可以走索引,但是不等于不行