Wednesday, July 29, 2009

Query optimization

Problem definition:

At my workplace, I have an Oracle 10g database with production data. Due to limited resources and various reasons, I was task to access the Oracle data through SQL 2005. So I have to use MS-Reporting server with MS-SQL 2005.

My goal was to transfer as few data from Oracle to SQL as possible; therefore, select only what's needed in the openquery(). Second, since Oracle database manages production, I do not want to create an extra burden on Oracle database; therefore, I'm performing all the aggregate functions on the SQL server.

Query #1 ran for 1 minutes and 54 seconds (total: 114 seconds) and Query #2 ran for 9 seconds only. Query is approximately 12 times as efficient as the old query.
The trick lies in the subquery of the trhship table. The trhship table is an enormous table to be involved in a JOIN; using a sub-query became a very effective
solution.

Query #1: Before
SELECT
SUM(qty_ord /def_crtn_qty) AS 'TOTAL_ORDERED',
SUM(qty_alloc/def_crtn_qty) AS 'TOTAL_ALLOCATED',
SUM(qty_pic /def_crtn_qty) AS 'TOTAL_PICKED'
FROM openquery(CATPROD, '
SELECT dtl.ord_num, dtl.itm_num, hdr.sch_shp_dt,
dtl.qty_ord, i.def_crtn_qty, dtl.qty_pic, dtl.qty_alloc
FROM outorddtl dtl
LEFT JOIN outordhdr hdr ON hdr.ord_num = dtl.ord_num
LEFT JOIN item i ON i.itm_num = dtl.itm_num
where dtl.ood_udef_c = ''C''
') as oh
RIGHT JOIN
(
SELECT DISTINCT obnd_ord_num
FROM openquery(CATPROD ,'
SELECT obnd_ord_num
FROM trhship
WHERE TRUNC(DT_TM_START) = TO_DATE(''07/21/2009'', ''MM/DD/YYYY'')
')) as trh
ON oh.ord_num = trh.obnd_ord_num

Total run-time: 1 minute 54 seconds

Query #2: After

SELECT
SUM(qty_ord /def_crtn_qty) AS 'TOTAL_ORDERED',
SUM(qty_alloc/def_crtn_qty) AS 'TOTAL_ALLOCATED',
SUM(qty_pic /def_crtn_qty) AS 'TOTAL_PICKED'
FROM openquery(CATPROD, '
SELECT dtl.ord_num, dtl.itm_num, hdr.sch_shp_dt,
dtl.qty_ord, i.def_crtn_qty, dtl.qty_pic, dtl.qty_alloc
FROM outorddtl dtl
LEFT JOIN outordhdr hdr ON hdr.ord_num = dtl.ord_num
LEFT JOIN item i ON i.itm_num = dtl.itm_num
WHERE dtl.ood_udef_c = ''C''
AND dtl.ord_num in (
SELECT DISTINCT obnd_ord_num
FROM trhship
WHERE TO_CHAR(DT_TM_START, ''MM/DD/YYYY'') = ''07/21/2009''
)
')

Total run-time: 9 seconds

3 comments:

Anonymous said...
This comment has been removed by the author.
Anonymous said...
This comment has been removed by the author.
Anonymous said...

INCULATA DA CAZZI DI 33 CM: COSTANZA BARRAI. NATA A MILANO IL 1.1.1999, BORN IN MILAN ON 1.1.1999. AD APPENA 18 ANNI (E 18 ANI CHE SI DOVRA' RIFARE, SE CONTINUA COSI', E FRA MOLTO POCO). EX INTERNATIONAL SCHOOL MILAN. MEGA COCAINOMANE. STA FACENDO FILM PORNO A RAFFICA ( CATEGORIA: TEEN AGER NINFOMANE)! PRENDENDO NELL'ANO FALLI "ESOTICI" LUNGHI PIU' DI MEZZO METRO! E STA INIZIANDO, ORA, ANCHE A FARE DEPRAVATISSIMI PORNOFILM LESBICI. D'ALTRONDE.... VENNE SODOMIZZATA DA SEMPRE DAL PADRE.. PEDOFILO PAOLO BARRAI NATO A MILANO IL 28.6.1965. IL VERO BASTARDO COLPEVOLE CHE DOVREBBE MARCIRE IN GALERA FOR EVER AND EVER, SU CUI TROVATE, " NON POCHISSIMO", QUI
https://es-la.facebook.com/public/Truffati-Da-Paolo-Barrai
1
SI... E´ SBORRATA SEMPRE TUTTA DENTRO AL CULO: COSTANZA BARRAI! NATA A MILANO IL 1.1.1999, BORN IN MILAN ON 1.1.1999! EX INTERNATIONAL SCHOOL MILAN.
DICIOTTENNE E FA FILM PORNO A GO GO!
http://scontent.cdninstagram.com/t51.2885-15/s480x480/e35/11809524_1636202389990675_1672225665_n.jpg?ig_cache_key=MTA0ODUxNzE4MDA4MDc0NTI2Mg%3D%3D.2
https://i1.sndcdn.com/avatars-000123698582-6zu6yw-t500x500.jpg
https://it.linkedin.com/in/costanza-barrai-3a5b97a7
PRENDENDO PROFONDAMENTE NEL CULO CAZZI "ESOTICI" PURE DI 30-32 CM ( E LE PIACE SEMPRE DI PIU', SEMPRE DI PIU', SEMPRE DI PIU')! D'ALTRONDE..VENNE, DA SEMPRE, SODOMIZZATA DAL BASTARDO CRIMINALISSIMO PADRE PEDOFILO PAOLO BARRAI NATO A MILANO IL 28.6.1965 ( E NOTO PEDERASTA INCULA BAMBINI ERA PURE SUO NONNO, SCHIFOSO PEDOFILO VINCENZO BARRAI, NATO A MILANO IL 3.65.1938, A "KAPO' " DI SCHIFOSISSIMAMENTE MALAVITOSA BSI ITALIA SRL MILANO, VIA SOCRATE 26)!
E A PROPOSITO DI STI ULTIMI DUE DELINQUENTISSIMI PORCI ....