14个join的select语句,头大!
能做性能优化修改的地方有以下几个:
1.where 和on条件中尽可能按照index顺序来排列条件,并且尽可能不在条件左边使用函数,比如substr可以用like 替代。如果非得使用函数,则把带有函数的条件排到后面。
2.按照业务逻辑能用inner join的地方不使用left join,这个语句有个地方inner join ls换成left join,时间要增加8倍!分别是30秒和240秒
3.join 后面的表尽可能不使用子查询
insert into bills
select
*--简化
from ixqdwdel ...
data studio的字体很难整,不支持Unicode的字体无法显示中文,最喜欢的courier new正好不支持,郁闷。
目前的字体如下:
Look and Feel Font java.awt.Font[family=MS UI Gothic,name=MS UI Gothic,style=plain,size=12]
Editor Font java.awt.Font[family=SansSerif,name=SansSerif,style=plain,size=12]
Text Results Font java.awt.Font[family=宋体,name=宋体,style ...
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
over(partition by deptno)按照部门分区
over(order by salary range between 50 preceding and 150 following)
每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150
over(order by salary rows between 50 preceding and 150 followin ...
merge into card f using ( select e.card_status,e.issue_date,c.id id,e.card_no card_no,e.maincard_flag maincard_flag,e.new_flag new_flag,e.suspend_times suspend_times from etl_custcard e,customer c where e.new_flag='1' And e.sys_date='20070904' and e.cust_no=c.id_no ) b on (f.card_number=b.card_no ...
强制中断shell程序后去修改表结构,发现说这张表busy.. pl/sql devoloper看sessions里头没有一个active的线程,怪了。
注销执行shell的那个用户后才能alter table 。
a表只有126条记录,b表有140万记录
1.
/*card_no必须是主键*/
Update ( Select (Case a.status When '挂失' Then '004' When '卡找回' Then '000'
When '取消用卡资格' Then '008' When '已还款' Then '000' End) status_new,
b.card_status,
(Case When a.status='取消用卡资格' Then 1 Else 0 End) increment_times,
b.suspend_times
From etl_daily ...
今天突然发现客户表里面姓名为空的记录竟然有13万之多,日期几乎都是5月31日进来的,在原始数据文件中又没有这些记录,真不知道怎么产生的,因为这些记录常常导致一个身份证号进来返回的是一条无名的记录,客户举报了N次,都是通过改查询代码来搪塞..看来得把这些垃圾数据彻底删除才能解决问题。
一条delete语句下去,一开始是外间约束错误,然后加上5月31日这个条件就不会了,但是半个小时都能没能删除这些垃圾数据,打开后台的session一看,3条类似select /*all rows*/ count(1) from card...的记录在运行,这个应该是oracle检验有没有发生外键冲突的语句,card ...
老二难缠,可能是因为皮蓬的原因,
取第二大的消费金额有以下写法,但是我没有找到最好的办法。因为不仅仅要取第二,还得取最大的和其他一些信息,并且这张表有2000万记录,如果分组后再和自己关联,效率肯定非常难看。
Select * From
(Select exp_amt,Id,Rownum idid From
(Select t.*,Rownum Id From etl_dzdinfo t Where t.main_crd_no='4518100351400218'
And exp_amt Is Not Null And trans_txt = '消费'
Order By exp ...
1.在给客户演示的时候导致锁表,提交了N次都无动于衷,系统卡死...
2.对一张2000万记录的表做了个trim的更新,乐滋滋的看到600秒就跑完了,然后去重新算了一遍月薪的指标,但是还是发现是0,郁闷啊郁闷啊,仔细一瞧才发现还是按照trim前的样子在计算,难怪速度很慢,因为没提交那个update呢。
http://www.oracle-base.com/articles/10g/MergeEnhancements10g.php
如果在9i中执行以下sql将报错:ora-00905:missing keyword
Merge Into card a
Using etl_cardinfo b On (a.card_number = b.card_no)
WHEN MATCHED Then
Update Set a.open_date=b.issue_date,a.card_limit=b.card_limit
;
在10G 中:The MATCHED and NOT MATCHED ...
Update card a
Set
(card_limit,open_date)=
(Select b.card_limit,b.issue_date From etl_cardinfo b Where a.card_number = b.card_no)
Where Exists (Select 1 From card a,etl_cardinfo b Where a.card_number = b.card_no)
总是报错说:ora-01407:can't set card.card_limit to null
于是改为
Update card a
Set open_date = ...
提交了一条sql,目的是把一张有2000万条记录的表的内容全部insert到另外一张表中,执行了2个小时没有完成。执行的过程中发现没必要这么做了,于是中断sql,但是pl/sql developer不理我,session logoff也不行,到enterprise manager里面中断会话->立即 也不行的样子,只好停止oralce了,sqlplus shutdown之后 等半天也没有shutdown掉,只好再次shutdown abort,这下世界清净了,但是发现多了一个僵尸进程出来,kill -9也是无效的,看着很是不爽,而且4G 内存不知道被什么占用了2G多,看来有必要重启机器了。
...
http://bugs.mysql.com/bug.php?id=23524
解决方法:mv /etc/my.cnf /etc/my.cnf.old
http://yangtingkun.itpub.net/post/468/245697
SQL> SELECT 1 FROM DUAL WHERE '' = '';
未选定行
SQL> SELECT 1 FROM DUAL WHERE '' IS NULL;
1
----------
1
SQL> SELECT DUMP(''), DUMP(NULL) FROM DUAL;
DUMP DUMP
---- ----
NULL NULL
上面三个SQL语句,任意一个都足以证明空字符串’’就是NULL。
-------
那sql中如果用 name='' 是根本不会返回值的,但是别的数 ...
Posted: 2006-04-14 20:06
因为电脑上先装了一个卡巴斯基6.0,没想到安装oralce的时候与这个东西产生了冲突,进行到19%的时候安装程序和卡巴斯基都双双死掉。cpu一直在被100%使用。没办法只能中止两个程序重新安装一遍。碰到这种情况得注意以下几点:
1.安装前把卡巴斯基的监控关闭,这个杀毒软件对文件监控可能引起安装程序崩溃,也有可能我这次是个意外。
2.卸载oralce厅麻烦的,先把安装到系统中的服务全部停止,并设置为手工启动,然后在注册表中搜索"oracle"的项,全部删除。其中如果安装了db2的数据仓库组件,有些dwhs项不要删除,Microsoft中的ora ...
基本概念:
存储过程即stored procedure,一般会被简称procedure。要学这个先得弄明白另外一个概念:routine,这个一般翻译成“例程”
>>routine:存在server端,按应用程序逻辑编写的,可以通过client或者其他routine调用的数据库对象.
>3种类型:stored procedures,UDFs(自定义function),methods.
stored procedures:作为客户端的扩展但是运行在服务端;UDFs:扩展并且自定义SQL;methods:提供结构化类型的行为
>2种形式:
1)sql routines:完全用sql编写,通过crea ...
Friday February 10, 2006 - 03:29pm (CST)
select customerid,max(balance) from temptable1 group by customerid
就可以达到目的了,我竟然半天不知道怎么下手。看来是被上次max(a,b)问题吓怕了。
(msn 的这些表情符号没有yahoo的酷。。)
找了一圈发现以前解决max(a,b)的土办法的文章找不到了,大概记得是:
max(a,b) = abs((a+b)/2)
min(a,b) = abs((a-b)/2)
这个发明源自交行的小曾,自己仅仅是扩展出一个mi ...
Friday February 17, 2006 - 05:24pm (CST)
1。decode()不仅仅针对固定值
(case when (b.aggregateno is null or b.aggregateno='') then customerid else b.aggregateno end)
也可以写成
decode(aggregateno,null,customerid,'',customerid,aggregateno)
decode里面放的是字段,而不是固定值,case when的语法实在难以写正确。而sql又没有发现IDE,程 ...
Tuesday February 28, 2006 - 03:52pm (CST)
报表数据核对,真tm对穿肠。核对加修改一堆复杂的sql,让人彻底晕头。
1.left join,还是它。
当left join时,对于主表的限制条件不能省,即使这个字段在On 语句中作为连接条件。
如 select * from t1 left join t2 on t1.currency=t2.currency and t2.currency in ('01','97') where ... 这样的sql 看起来只会出来 currency为01,97的,实际上 ...
Friday March 24, 2006 - 10:03am (CST)
昨天写了一句下面的sql:
delete from tempRelation where BANKRELATIONID not exist (select distinct BANKRELATIONID from tempRelation )
失败!
这个写法不光不能执行,还把exist当作in 来理解了。 exist只是表示有返回结果集,只作用于集合;in表示一个变量是否在一组定值中。
一般情况下,外部表的结果比较大,内部表的结果比较小时,用IN。如果外部表的结果比较小,而内 ...
Monday February 20, 2006 - 02:59pm (CST)
1)select customerid,b.aggregateno
from temptop10 a left outer join AGGREGATE_MEMBER b
on a.aggregateno=b.aggregateno and b.dwmonth='2005-12-31'
2)select customerid,b.aggregateno
from temptop10 a left outer join AGGREGATE_MEMBER b
...
bcp rls..client_ref_temp in c:\clientdata.txt -Snewcredit -Usa -P111111 -t "|" -r -c -Jcp850
报告说:
CSLIB Message: - L0/O0/S0/N24/1/0: cs_convert: cslib user api layer: common library error: The conversion/operation was stopped due to a syntax error in the source field.
昨天侥幸发现自己没有加换行符 ...
select T1.serialno,t1.dwmonth,t2.dwmonth,T1.balance,t2.balance as ReportItem from receive_badloan T1 left join a_contract T2 on t1.dwmonth=t2.dwmonth and t2.dwmonth='2005/10/31' and t1.serialno = t2.serialno and t1.businesscurrency = t2.businesscurrency where oper ...
select case when opinionchoice ='02' then '否决' else cast(businesssum2 as varchar) end, T1.businesstype2nfrom hq_opn T1
上面这个sql看起来没有一点问题,但是在winsql上一跑,什么结果都没有,也不报错。但实际上是有很多记录的。林先胡发现 cast中的var要加长度,于是变为select case when opinionchoice ='02' ...
- 浏览: 370469 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
我的相册
Gmail
共 8 张
共 8 张
最新评论
-
有多少异常可以重来
这个错误解决了,又抱了别的错误~
-- by iceworld4143 -
有多少异常可以重来
解释不太懂,我也遇到这个问题了,可是我没用ant。 等回复。
-- by iceworld4143 -
考试不及格
证券从业资格考试
-- by eyejava -
考试不及格
。呃。。。啥考试?
-- by quiii -
栖霞建设涨停,该喜该忧?
栖霞建设前5年做的真是不赖。但是未来10年有25%的复合增长率是非常值得怀疑的。 ...
-- by eyejava






评论排行榜