Here it is.....
Header which is the main table is 1.5 million rows and result query is
half a million.
QUERY(BAD):
------
select *
from header, address, outer email_gen
WHERE region_code = '1'
AND email_gen.sma_em = 'P'
AND header.head_number = email_gen.sma_number
AND address.supplier_number = header.head_vendor
AND address.address_number = header.head_vendor_addr
AND 1=1
and head_date > '2000/01/01'
ORDER BY head_date
Estimated Cost: 355796
Estimated # of Rows Returned: 1
Temporary Files Required For: Order By
1) sumdba.sdf_address: SEQUENTIAL SCAN
Filters: 1 = 1
2) sumdba.poheader: INDEX PATH
Filters: (sumx.header.region_code = '1' AND sumx.header.head_date > 2000/01/01 )
(1) Index Keys: head_vendor head_vendor_addr (Serial, fragments: ALL)
Lower Index Filter: (sumx.header.head_vendor_addr = sumx.sdf_address.address_number AND sumx.po
header.head_vendor = sumx.address.supplier_number )
NESTED LOOP JOIN
3) sumy.email_gen: INDEX PATH
(1) Index Keys: sma_number sma_em
Lower Index Filter: (sumy.email_gen.sma_em = 'P' AND sumy.email_gen.sma_number = sumx
.header.head_number )
NESTED LOOP JOIN
=============================================
QUERY(GOOD):
------
select --+ INDEX (header header_i02)
*
from header, address, outer email_gen
WHERE region_code = '1'
AND email_gen.po_sma_em = 'P'
AND header.head_number = email_gen.sma_number
AND address.supplier_number = header.head_vendor
AND address.address_number = header.head_vendor_addr
AND 1=1
and head_date > '2000/01/01'
ORDER BY head_date
DIRECTIVES FOLLOWED:
INDEX ( header header_i02 )
DIRECTIVES NOT FOLLOWED:
Estimated Cost: 578199
Estimated # of Rows Returned: 1
1) sumx.header: INDEX PATH
Filters: (1 = 1 AND sumx.header.region_code = '1' )
(1) Index Keys: head_date (Serial, fragments: ALL)
Lower Index Filter: sumx.header.head_date > 2000/01/01
2) sumx.address: INDEX PATH
(1) Index Keys: supplier_number address_number
Lower Index Filter: (sumx.address.address_number = sumx.poheader.head_vendor_addr AND sumx.address.supplier_number = sumx.header.head_vendor )
NESTED LOOP JOIN
3) sumy.email_gen: INDEX PATH
(1) Index Keys: sma_number sma_em
Lower Index Filter: (sumy.email_gen.sma_em = 'P' AND sumy.email_gen.sma_number = sumx
.header.head_number )
NESTED LOOP JOIN
============================================
--Index for Header--
Index name Owner Type Cluster Columns
header_i02 informix dupls No head_date