大侠们,
你们好,我需要从后台的oracle取数据,如下的数据是我写的,大概是关联到6张表的数据,如下是我写的语句,能否帮忙看看哪里优化下?就10天的数据,已经运行了3个小时,非常感谢你们的帮助SELECT EO.LIFNR vendor_number,LA.LAND1 Vendor_country,EO.ERNAM Buyer,MR.LABOR Terex_Code,EP.MATNR material_number,EP.TXZ01 Short_text,EB.MENGE Quantity,EP.MEINS Unit,(EP.NETPR/EP.BPUMN/EP.EBELP) NETPRICE,EO.WAERS Currency,ET.EINDT LEADDELIVERYDATE,EB.BUDAT ACTUALDELIVERYDATE, EO.BEDAT Create_Date,EO.UNSEZ FROM EKPO EP, EKBE EE, EKKO EO,EKET ET,LFA1 LA,MARA MR,EKBE EB WHERE ET.EBELN=EP.EBELN and ET.EBELP=EP.EBELP AND EB.EBELN=EP.EBELN and EB.EBELP=EP.EBELP and EP.MATNR=MR.MATNR and LA.LIFNR=EO.LIFNR and EB.BWART='101' and EB.BEWTP='E' and TO_DATE(EB.BUDAT,'yyyy-mm-dd') BETWEEN TO_DATE('2016-2-1', 'yyyy-mm-dd') and TO_DATE('2016-2-10', 'yyyy-mm-dd')
你们好,我需要从后台的oracle取数据,如下的数据是我写的,大概是关联到6张表的数据,如下是我写的语句,能否帮忙看看哪里优化下?就10天的数据,已经运行了3个小时,非常感谢你们的帮助SELECT EO.LIFNR vendor_number,LA.LAND1 Vendor_country,EO.ERNAM Buyer,MR.LABOR Terex_Code,EP.MATNR material_number,EP.TXZ01 Short_text,EB.MENGE Quantity,EP.MEINS Unit,(EP.NETPR/EP.BPUMN/EP.EBELP) NETPRICE,EO.WAERS Currency,ET.EINDT LEADDELIVERYDATE,EB.BUDAT ACTUALDELIVERYDATE, EO.BEDAT Create_Date,EO.UNSEZ FROM EKPO EP, EKBE EE, EKKO EO,EKET ET,LFA1 LA,MARA MR,EKBE EB WHERE ET.EBELN=EP.EBELN and ET.EBELP=EP.EBELP AND EB.EBELN=EP.EBELN and EB.EBELP=EP.EBELP and EP.MATNR=MR.MATNR and LA.LIFNR=EO.LIFNR and EB.BWART='101' and EB.BEWTP='E' and TO_DATE(EB.BUDAT,'yyyy-mm-dd') BETWEEN TO_DATE('2016-2-1', 'yyyy-mm-dd') and TO_DATE('2016-2-10', 'yyyy-mm-dd')
解决方案 »
- sqlserver可以用[]把列名括起来,那么在oracle用什么呢
- pl/sql中如何调用包里面的过程和函数啊???
- oracle删除用户时报错,ORA-00604、ORA-01740
- 我的ORACLE占用CPU达60%,达100%,我怎么才能知道它到底在干什么?
- 删除,序号重复记录SQL
- exp 出现的LRM-00112: multiple values not allowed for parameter 'log' 的问题
- TSPITR问题
- 关于date型数据的问题
- oracle表连接怎么做,连接后可以同步更新数据吗?
- 代发地方更符合
- oracle 安装出错 runInstaller报错
- 新手学习中,是不是配置文件错了
随便看一眼,这东西这么写就不走索引了,直接用char类型比较吧,别用to_date转了 ,另外你这个字段既然是要保存日期,为啥建表的时候不用date类型。
1. xu176032 and haier_gege, 我们打算是在现有的这套很老的ERP系统,后台用Oracle8I 数据库,我查了下,BUDAT确实是VARCHAR2类型,但不知道日期型的字符串是如何比较2. 确实很耗资源,最后提示out of memory, left join on要怎么写比较好,差不多有6张表的内容
TO_DATE('2016-2-1', 'yyyy-mm-dd') and
TO_DATE('2016-2-10', 'yyyy-mm-dd')这个不走索引,创建一个 CREATE INDEX P_IDX ON EKBE(TO_DATE(EB.BUDAT, 'yyyy-mm-dd')); 这样的索引,你再试试。
如果可以添加索引的话,可以直接在EB.BWART 、 EB.BEWTP、EB.BUDAT上面建一个联合索引,BUDAT可以考虑建一个函数索引,或者直接用EB.BUDAT in (2016-2-1,2016-2-2,)这样走索引也行。另外,把执行计划贴一下吧