How can i imrove peroformance of complex Query
How can i improve performance of complex Query
which used CASE WHEN , GROUP By Rollup
for example
SELECT CASE WHEN null then a
ELSE b END
FROM (
SELECT a,b,c,..........
FROM table1
UNION ALL
SELECT a,b,c,..........
FROM table2
GROUP BY ROLLUP a,b,c ,............
this query take 18 min to return 180000 record
is there is any way to improve the performance of this query
Hello
Have you considered using
ALTER SYSTEM SET _fast=TRUE;-)
Alternatively you could provide some more information such as an execution plan for your query:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
SQL> set linesize 200
SQL> set pages 50000
SQL> EXPLAIN PLAN FOR
2 select * from dual;
Explained.
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | SELECT STATEMENT | | | | |
| 1 | TABLE ACCESS FULL | DUAL | | | |
Note: rule based optimization
9 rows selected.If you want general info on tuning, I suggest you read the Perfomance tuning guide and the Data Warehousing guide. These are the best place to find information about concepts and techniques. The forums are better suited to specific questions.
HTH
David
Similar Messages
-
How can I create variant of control query?
Dear Expert,
I am using BEx Broadcaster to bradcast query as a report.
In tab Filter Navigation, I enter the control query, but the variant always gives me "(No Selection Possible)".
How can I create variant of control query?
I try to create variant via variable entry page when I excute my query.
The variable show in table "RSRPARAMETRIZA" but not show in BEx Braodcaster.
Thank you,
ZillaHello,
Please run this control query on the portal and then save variant you require. If you want this variant to be available
to all users make sure that the user specific flag is unchecked while saving the variant.
Regards,
Michael -
How can i check when a given query was run
how can i check when a given query was run ( i mean the timestamp ) from forms
I am trying to run the query depending on when it was last runHello,
I'm not sure to really understand your need, but if you want to refresh the data blocks regularly, you can use a timer that would execute_query on the block every elapsed period of time.
Anyway, there is no "timestamp" of this kind, so that you would store the information somewhere in memory on in a table, from a PRE-SELECT or POST-SELECT trigger for instance.
Francois -
How can update two rows in one query?
How can update two rows in one query?
Edited by: OracleM on May 4, 2009 12:16 AMWhat do you mean with "two rows"? May be two columns??
If the where clause of UPDATE query matches two rows, then it will update two rows. If you want to update two columns, then add column names to your query
UPDATE your_table SET col1=value1, col2=value2 WHERE your_where_clause- - - - - - - - - - - - - - - - - - - - -
Kamran Agayev A. (10g OCP)
http://kamranagayev.wordpress.com
[Step by Step install Oracle on Linux and Automate the installation using Shell Script |http://kamranagayev.wordpress.com/2009/05/01/step-by-step-installing-oracle-database-10g-release-2-on-linux-centos-and-automate-the-installation-using-linux-shell-script/] -
How can I extract image from complex (multycoloured0 background?
How can I extract image from complex (multycoloured) shot?
I would say either using the pen tool or the quick mask tool but without seeing how complex the image/background is I can't give you a complete answer...?
Can you post the image? -
How can i change the default text "Query by Example"
Studio Edition Version 11.1.1.3.0
how can i change the default text *"Query by Example"* in a Panel Collection
ThxHi thieto,
The label you are looking for is af_panelCollection.LABEL_MENUITEM_QBE*
I'm currently writing a blogpost on this issue. In short, you will have to create a skin resource bundle.
In the skin definition, refer to this bundle class.
<?xml version="1.0" encoding="ISO-8859-1"?>
<skins xmlns="http://myfaces.apache.org/trinidad/skin">
<skin>
<id>mySkin.desktop</id>
<family>MySkin</family>
<extends>blafplus-rich.desktop</extends>
<render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
<style-sheet-name>skins/MySkin.css</style-sheet-name>
<bundle-name>com.blogspot.lucbors.view.bundles.MySkinBundle </bundle-name>
</skin>
</skins>In this class, adjust the label text to your needs.
package com.blogspot.lucbors.view.bundles;
import java.util.ListResourceBundle;
public class MySkinBundle extends ListResourceBundle {
public MySkinBundle() {
super();
@Override
public Object[][] getContents() {
return _CONTENTS;
static private final Object[][] _CONTENTS = {
{"af_panelCollection.LABEL_MENUITEM_QBE","the text that you want"}
}More in the blogpost
Good luck
Luc Bors
Edited by: lucbors on Jul 26, 2010 11:39 AM (blogpost finished - URL added) -
How to store data from a complex query and only fresh hourly or daily?
We have a report which runs quite slow (1-2 minutes) because the query is quite complicate, so we would like to run this query daily only and store in a table so for those procedures that need to use this complex query as a subquery, can just join to this table directly to get results.
However, I am not sure what kind of object I should use to store data for this complex query. Is data in global temp table only persist within transaction? I need something that can persist the data and be access by procedures.
Any suggestions are welcome,
CheersThank you for your reply. I looked at the materialized view earlier on, but have some difficulties to use it. So I have some questions here:
1.The complex query is not a sum or aggregate functions, it just need to get data from different tables based on different conditions, in this case is it still appropriate to use meterialized view?
2.If it is, I created one, but how to use it in my procedure? From the articles I read, it seems I can't just query from this view directly. So do I need to keep the complex query in my procedure and how the procedure will use the meterialized view instead?
3. I also put the complex query in a normal view, then create a materialized view for this normal view (I expect the data from the complex query will be cache here), then in the procedure I just select * from my_NormalView, but it takes the same time to run even when I set the QUERY_REWRITE_ENABLED to true in the alter session. So I am not sure what else I need to do to make sure the procedure use the materialized view instead of the normal view. Can I query from the Materialized View directly?
Below in the code I copied from one of the article to create the materialized view based on my normal view:
CREATE MATERIALIZED VIEW HK3ControlDB.MW_RIRating
PCTFREE 5 PCTUSED 60
TABLESPACE "USERS"
STORAGE (INITIAL 50K NEXT 50K)
USING INDEX STORAGE (INITIAL 25K NEXT 25K)
REFRESH START WITH ROUND(SYSDATE + 1) + 11/24
NEXT NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') + 15/24
enable query rewrite
AS SELECT * FROM HK3ControlDB.VW_RIRating;
Cheers -
How can i achieve tis in Bex Query Designer
Hi Experts,
Please advise on how can i achieve this in Query.
I got Location,Material_ID,Price and Change_Date.
(Change_Date is defined as both CHAR & KF in cube)
(Change date is on monthly basis they execute a programe in non sap source system to update the prices of material)
The Price of material tends to change or may not change ...
Every month we get a record from source system on material price
My requirment is to bulid a report that show
LocationMaterial_IDCurrent Price and Previous Price
Please advise how can i develop this reportWhile loading into cube, normally you map price field coming from datasaource to
infobject ZPRICE_CURRENT in your infocube.
So in transformation you map like this
price -
> ZPRICE_CURRENT
Now, Maintain another keyfigure in cube ZPRICE_PREVIOUS.
That is not mapped with anything.But is assigned a value in the Start routine
which just runs before, the transformation.
In the start routine write code something like this :
Read current value of price from cube for that Material.
(Select ZPRICE_CURRENT into price_curr from cube where material = DATA-PACKAGE- Material )
if DATA_PACKAGE-price <> price_curr ( if new_price <> old_price)
ZPRICE_PREVIOUS = price_curr. (storign present value of price in the cube )
endif.
Now save the Start routine. When mapping the fields in the transformation
dont map anythign to ZPRICE_PREVIOUS as it is already filled in teh start routine from the above code.Leave it unmapped.
The below mapping is normally maintained without change..
price -
> ZPRICE_CURRENT
If you find this to be useful ..please do the needful (points) -
How can i use index in select query.. facing problem with the select query.
Hi Friends,
I am facing a serious problem in one of the select query. It is taking a lot of time to fetch data in Production Scenario.
Here is the query:
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE tbl_summary
FROM ztftelat LEFT JOIN ztfzberep
ON ztfzberep~gjahr = st_input-gjahr
AND ztfzberep~poper = st_input-poper
AND ztfzberepcntr = ztftelatrprctr
WHERE rldnr = c_telstra_accounting
AND rrcty = c_actual
AND rvers = c_ver_001
AND rbukrs = st_input-bukrs
AND racct = st_input-saknr
AND ryear = st_input-gjahr
And rzzlstar in r_lstar
AND rpmax = c_max_period.
There are 5 indices present for Table ZTFTELAT.
Indices of ZTFTELAT:
Name Description
0 Primary key( RCLNT,RLDNR,RRCTY,RVERS,RYEAR,ROBJNR,SOBJNR,RTCUR,RUNIT,DRCRK,RPMAX)
005 Profit (RCLNT,RPRCTR)
1 Ledger, company code, account (RLDNR,RBUKRS, RACCT)
2 Ledger, company code, cost center (RLDNR, RBUKRS,RCNTR)
3 Account, cost center (RACCT,RCNTR)
4 RCLNT/RLDNR/RRCTY/RVERS/RYEAR/RZZAUFNR
Z01 Activity Type, Account (RZZLSTAR,RACCT)
Z02 RYEAR-RBUKRS- RZZZBER-RLDNR
Can anyone help me out why it is taking so much time and how we can reduce it ? and also tell me if I want to use index number 1 then how can I use?
Thanks in advance.Hi Shiva,
I am using two more select queries with the same manner ....
here are the other two select query :
***************1************************
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE tbl_summary
FROM ztftelpt LEFT JOIN ztfzberep
ON ztfzberep~gjahr = st_input-gjahr
AND ztfzberep~poper = st_input-poper
AND ztfzberepcntr = ztftelptrprctr
WHERE rldnr = c_telstra_projects
AND rrcty = c_actual
AND rvers = c_ver_001
AND rbukrs = st_input-bukrs
AND racct = st_input-saknr
AND ryear = st_input-gjahr
and rzzlstar in r_lstar
AND rpmax = c_max_period.
and the second one is
*************************2************************
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE tbl_summary
FROM ztftelnt LEFT JOIN ztfzberep
ON ztfzberep~gjahr = st_input-gjahr
AND ztfzberep~poper = st_input-poper
AND ztfzberepcntr = ztftelntrprctr
WHERE rldnr = c_telstra_networks
AND rrcty = c_actual
AND rvers = c_ver_001
AND rbukrs = st_input-bukrs
AND racct = st_input-saknr
AND ryear = st_input-gjahr
and rzzlstar in r_lstar
AND rpmax = c_max_period.
for both the above table program is taking very less time .... although both the table used in above queries have similar amount of data. And i can not remove the APPENDING CORRESPONDING. because i have to append the data after fetching from the tables. if i will not use it will delete all the data fetched earlier.
Thanks on advanced......
Sourabh -
How can i improve a performence of query
How can i improve performence of query which not having the where clause for a table
whenever the query have the where clause then only it can use the indexes
otherwise how it can use the index eventhough we create the index of that table columns. -
How can i check the longest running query ??
Hi ,
I need to find out which query that is taking the longest time ?
how can i check that ?
pls advise
tks & rgdsCurrent Active Queries:
col sql_text format a50
col machine format a10
col username format a10
col action format a10
set linesize 200
SELECT /*+ ORDERED */
username
,S.LAST_CALL_ET
,s.action
,S.STATUS
,s.sid
,s.serial#
, s.machine
, X.sql_text
FROM sys
.v_$session S
LEFT OUTER JOIN sys.v_$sqlarea X
ON s.sql_address = x.address
AND s.sql_hash_value = x.hash_value
WHERE s.type != 'BACKGROUND'
AND s.STATUS = 'ACTIVE'
ORDER BY 2,1
You can add AND s.USERNAME= 'USERNAME' for a particular user
Long Running Queries
col sql_text format a50
col opname format a20
col machine format a10
col username format a10
col action format a10
set linesize 200
select /*+ ORDERED */
sl.username
,sl.opname
,sl.start_time
,sl.last_update_time
,sl.time_remaining
,sl.elapsed_seconds
,sa.sql_text
from v$sqlarea sa,v$session_longops sl
where sl.sql_hash_value = sa.hash_value
and sl.sql_address = sa.address
/ -
Utl_raw.bit_and - how can I improve performance of this query?
Hi all
Hugely grateful for any light anyone can shed.
I need to do bit AND operations on 128 bit numbers and I'm stuck in Oracle 10g.
10g provides a very nice bitand() function that can be applied to numbers but it only works up to 64 bit numbers (actually only 62 I think because it needs a couple of bits)
So I've been looking at using the utl_raw.bit_and function. It works very well, except that I'm encountering a massive performance hit, which hopefully is in the way I'm using it, rather than intrinsic to the speed at which utl_raw.bit_and itself performs..
With numbers, I do a query like this:
select count(1) from offer_a where bitand(bit_column, 51432) = 51432
With utl_raw.bit_and (and 16-byte RAW column), I am passing in a hex value (may not be the best thing? Would passing in binary be better?) and doing my query like this:
select count(1) from offer_a where utl_raw.bit_and(bit_column,hextoraw('00000000000000000020008000002ca1')) = hextoraw('00000000000000000020008000002ca1');
One million rows using bitand takes about a second, using utl_raw.bit_and like this takes 25 seconds or so!!! Hopefully it's something in the way I'm calling it, and there's a faster way?
Thank you!
JakeHmm.. Actually it may not be that simple.
I had created an index on the number column that oracle seems to consistently use if I do a query like:
select count(1) from scott.offer_b where
current_price >= 0 and
bitand(current_price, 9008574719100165) = 9008574719100165
(without the >= oracle seems to do a full table scan. The reason I created the index is that there's other columns in the data table, making larger blocks. I figured that an index, even though most of needs to be scanned, would be faster because I can cram many more rows into each block..?).
But if I drop the index on the number column, it takes about 12 secs/1m rows, in other words about half the time of the utl_raw.bit_and().
So it's possible that bitand on 64 bits takes about half the time of utl_raw.bit_and on 128 bits, which is very reasonable..
So maybe the real problem I have is why oracle is not using the equivalent index that I placed on the RAW column when I do:
select count(1) from scott.offer_b where
hex_bit_sig >= '00000000000000000020008000002ca1' and
utl_raw.bit_and(hex_bit_sig,'00000000000000000020008000002ca1') = '00000000000000000020008000002ca1';
(By the way I realized that I don't need to use the hextoraw - seems like just putting a hex number in '' is the right way to specify a raw anyway?)
So yes, I think that's the real problem - how can I get oracle to use the index I created on the RAW value -
How can I pass value from sql query to unix script
I am new to oracle/unix.
I want to write a simple script to find max date from a table and then pass date into a variable in a korn shell script.
sql is select max(date) from table;
how can I pass that value in unix shell as a variable. ThanksI use to code like this.
Enjoy Scripting.
cmd.sql
select sysdate from dual;
exit
db.sh
#! /usr/bin/ksh
. ~oracle/.orapaths
dbdate=$(sqlplus -S user/pwd@servicename @cmd.sql)
echo $dbdate
Run shell scripts
./db.sh
SYSDATE --------- 19-JAN-07 -
How can i create the exceptions in query
Hi Firends,how can i create the exceptions for key figures and charectristics and how can can i assign the colours and when we will create the variables for exceptions..
please let me know..
Assign Points surely..
regardsHi,
Not sure i understnad your request 100%, but exceptions for key figures are created as explained in http://help.sap.com/saphelp_nw04/helpdata/en/68/253239bd1fa74ee10000000a114084/content.htm
and
http://help.sap.com/saphelp_nw04/helpdata/en/1a/615f64816311d38b170000e8284689/content.htm
Assign points if useful,
Xibi -
How to bind local variables in complex query in PL/SQL
Hi
I have long complex query with local varibales; when I run in Dynamic SQL I get an error. Not sure which is the easiest way to bind local variables.
L_QUERY := q'[select m.segment1 col1,
'1' col2,
'13' col3,
l.operand col4,
0 col5,
'Y' col8,
'N' col9,
'N' col10,
decode(h.name,'09_UKOR_*','EOS Credit','10_UKOR_*','TopUp','11_UKOR_*','Main') col18
from qp_list_headers_v h,
qp_list_lines_v l,
mtl_system_items m
where h.name in ('09_UKOR_*','10_UKOR_*','11_UKOR_*')
and h.list_header_id = l.list_header_id
and m.inventory_item_id = l.product_attr_value
and m.organization_id = 84
UNION all
SELECT qs.PRODUCT_ATTR_VALUE col1,
hca.account_number col2,
decode (su.site_use_code,'BILL_TO','21','SHIP_TO','18') col3,
0 col4,
qs.operand col5,
null col6,
null col7,
'N' col8,
'Y' col9,
'N' col10,
--Local variables
(case when (trunc(nvl(qq.start_date_active,sysdate)) between l_cur_year_from and l_cur_year_to) and
( trunc(nvl(qq.end_date_active,l_cur_year_to)) >= trunc(l_cur_year_to) ) then 'TopUp'
when (trunc(qq.start_date_active) between l_next_year_from and l_next_year_to) and
( trunc(nvl(qq.end_date_active,l_next_year_to)) >= l_next_year_to) then 'Main'
when (trunc(qq.start_date_active) between l_last_year_from and l_last_year_to) and
( trunc(nvl(qq.end_date_active,l_last_year_to)) >= l_last_year_to ) then 'EOS Return'
end )col18,
--Local variables
(case when (trunc(qq.start_date_active) between l_next_year_from and l_next_year_to) and
( trunc(nvl(qq.end_date_active,l_next_year_to)) >= l_cur_year_to ) then 'N'
else
'Y' end ) col21
FROM qp.qp_list_headers_b qlhb,
qp.qp_list_headers_tl qlht,
qp.qp_qualifiers qq,
qp_modifier_summary_v qs,
hz_cust_site_uses_all su,
hz_cust_acct_sites_all sa,
hz_cust_accounts hca
WHERE 1=1
and qlhb.LIST_TYPE_CODE = 'DLT'
and nvl(qlhb.active_flag,'Y') = 'Y'
and qlhb.list_header_id = qlht.list_header_id
AND qq.list_header_id = qlhb.list_header_id
and qq.list_type_code = qlhb.LIST_TYPE_CODE
and qq.QUALIFIER_CONTEXT = 'CUSTOMER'
and qs.list_header_id = qlhb.list_header_id
and qs.LIST_LINE_TYPE_CODE = 'DIS'
and su.site_use_id = qq.qualifier_attr_value --1064
AND su.cust_acct_site_id = sa.cust_acct_site_id
AND sa.cust_account_id = hca.cust_account_id ]';
--call Dynamic SQL function
l_cursor := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(l_cursor, p_QUERY , DBMS_SQL.NATIVE);
l_rows := DBMS_SQL.EXECUTE(l_cursor);
Any help will be much appreciated.
iI guess I should use DBMS_SQL.BIND_VARIABLE to bind all variables seperately so not to mess with query1) What is the error you get?
2) If you use bind variables inside a query, you should prefix them with colons, so use :l_cur_year_from etc.
3) Why are you using dbms_sql instead of native dynamic sql and/or ref-cursors?
Toon
Maybe you are looking for
-
Unable to print from iPhoto after upgrading to Yosemite?
Whenever I want to print from iPhoto, the application on the IMac becomes unresponsive and will not print. This all started after upgrading to Yosemite. My printer is updated, so now I have no idea how to make this work again. Any help would be great
-
How to get current node element for recursive node.
Hello Xperts, I have a requirement where I need to find the current node element of the recursive node. I was trying following code for the same Data: selected_elem type ref to if_wd_context_element. selected_elem = WDEVENT->GET_CONTEXT_ELEMENT( NAM
-
What does a red airplay icon indicate?
Since upgrading to ios 6, when using airplay the icon is always red not blue, when playing from Music on my ipad3. The airplay is still functioning ok just wondering if there's a reason why it's red there and blue everywhere else?
-
I Have recieved now 2 emails from O2 saying I have a picture message from a mobile number sent to me. the email has the paper clip which I know usually means there is an attatxhment. When opening there is no option to open anything just says you have
-
Hello, I'm currently working on getting VIs version with invoke node but it doesn't work well when I make a .EXE, I'm now looking for information of getting the VI version by reading it like a text, I found the info manualy for 2011 and 2012 Vis but