ORACLE里面有很多统计用的函数,比如COUNT, SUM, MAX, LAST_VALUE, FIRST_VALUE。
乍一看可能觉得很好理解,没什么复杂的。
但是如果一个窗口的概念不弄明白的话,你会觉得很复杂,很难用,然后怀疑这些个函数都不好用了。
比方说你想一张薪水的历史记录表,
salary_history
emp_id,
salary,
update_date
你想找出每个人最新的薪水的值
select last_value(salary) over (partition by emp_id order by update_date rows between unbounded preceding and unbounded following) from salary_history;
其中 rows between unbounded preceding and unbounded following 就是指定了窗口:所有的数据。
如果不指定的话,默认的窗口是 range between unbounded preceding and current row,也就是当前记录为止的所有记录。
这个默认窗口只是对有order by的数据才有效, 而max, count函数如果不指定order by, 那么他的对象就是所有的数据。这点在ORACLE的文档里并没有提及的。
2010年11月26日星期五
2010年11月9日星期二
通过表移动来提高Oracle表的空间利用率
表经过多次的插入,更新,删除之后,会存在断片化的问题。表空间的使用率降低,而且影响性能。
可以用以下的方法来改善。
alter table tab1 move;
alter index tab1_ind1 rebuild;
alter index tab1_ind2 rebuild;
表的移动,内部动作是把表数据拷贝到临时表空间,复制处理结束后,切换掉旧的表空间,所以需要有空余的表空间才能支持这个操作。
索引重建是因为旧的ROWID发生变化,导致无效
可以用以下的方法来改善。
alter table tab1 move;
alter index tab1_ind1 rebuild;
alter index tab1_ind2 rebuild;
表的移动,内部动作是把表数据拷贝到临时表空间,复制处理结束后,切换掉旧的表空间,所以需要有空余的表空间才能支持这个操作。
索引重建是因为旧的ROWID发生变化,导致无效
2010年11月8日星期一
oracle v$session v$process
v$session 里面有关于进程process的信息,那个客户端的信息, 而v$process里面的spid是oracle服务进程的ID,不要搞混了。
v$session里面的process列里面有的时候显示 196:1148, 2段信息是客户端自己的序列号
这两个视图由以下相连接
v$session.paddr = v$process.addr
v$session里面的process列里面有的时候显示 196:1148, 2段信息是客户端自己的序列号
这两个视图由以下相连接
v$session.paddr = v$process.addr
2010年11月4日星期四
/proc/cpuinfoの見方
# cat /proc/cpuinfo |egrep 'physical id|core' |sort
1个物理CPU,4个Core,单线程
core id : 0 core id : 1 core id : 2 core id : 3 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 physical id : 0 physical id : 0 physical id : 0 physical id : 0
2个物理CPU,2core,2线程
core id : 0 core id : 0 core id : 1 core id : 1 core id : 2 core id : 2 core id : 3 core id : 3 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 cpu cores : 4 physical id : 0 physical id : 0 physical id : 0 physical id : 0 physical id : 1 physical id : 1 physical id : 1 physical id : 1
订阅:
博文 (Atom)