View Single Post

   
  #6 (permalink)  
Old 04-08-2008, 03:07 PM
Martin
 
Posts: n/a
Default Re: Optimizer using the wrong index

"Bret Halford" <bret@sybase.com> wrote in message
news:34c88f2b.0311291853.9f41dfd@posting.google.co m...

> While there have been a number of changes in the optimizer since
> 11.5.x, the basic information given by these commands is still the
> same (I believe there have been formatting changes, though). If that
> doesn't help you make sense of the output, post it here and you may
> get some good commentary on it.


The table is C_daily_stats. The main fields are:

Column_name Type Length
----------- ---- -----------
C_series_no C_series_no_t 4 (integer)
stats_C_date C_date_t 8 (date)
stats_C_newdate C_newdate_t 4 integer eg
20031201)
....

index_name index_description index_keys
index_max_rows_per_page
---------- ----------------- ----------
----------
C_daily_stats_index clustered, unique located on default C_series_no,
stats_C_date 146
C_daily_stats_index2 nonclustered located on default stats_C_newdate,
C_series_no 0

The SQL to run is:

declare @today C_date_t
select C_logical_date_value
from C_system_dates
where C_logical_date_name = 'today'

select C_series_no,
@today,
convert(int,convert(varchar,@today,112) )
from V_valid_series_daily_stats valsds
where valsds.C_series_no not in (select dais.C_series_no
from C_daily_stats dais
where dais.stats_C_newdate =
convert(int,convert(varchar,@today,112)))

and the showplan is:
QUERY PLAN FOR STATEMENT 1 (at line 1).

STEP 1
The type of query is DECLARE.

QUERY PLAN FOR STATEMENT 2 (at line 2).

STEP 1
The type of query is SELECT.

FROM TABLE
C_system_dates
Nested iteration.
Using Clustered Index.
Index : C_system_dates_index
Ascending scan.
Positioning by key.
Keys are:
C_logical_date_name
Using I/O Size 2 Kbytes.
With LRU Buffer Replacement Strategy.

QUERY PLAN FOR STATEMENT 3 (at line 6).

STEP 1
The type of query is SELECT.


FROM TABLE
C_system_dates
Nested iteration.
Using Clustered Index.
Index : C_system_dates_index
Ascending scan.
Positioning by key.
Keys are:
C_logical_date_name
Using I/O Size 2 Kbytes.
With LRU Buffer Replacement Strategy.

FROM TABLE
C_contract
Nested iteration.
Table Scan.
Ascending scan.
Positioning at start of table.
Using I/O Size 2 Kbytes.
With LRU Buffer Replacement Strategy.

FROM TABLE
C_series
Nested iteration.
Table Scan.
Ascending scan.
Positioning at start of table.


Run subquery 1 (at nesting level 1).
Using I/O Size 16 Kbytes.
With LRU Buffer Replacement Strategy.


FROM TABLE
C_delivery_month
Nested iteration.
Using Clustered Index.
Index : C_delivery_month_index
Ascending scan.
Positioning by key.
Keys are:
C_delivery_month_no
Using I/O Size 2 Kbytes.
With LRU Buffer Replacement Strategy.


FROM TABLE
C_contract_type
Nested iteration.
Table Scan.
Ascending scan.
Positioning at start of table.
Using I/O Size 2 Kbytes.
With LRU Buffer Replacement Strategy.


FROM TABLE
C_contract
Nested iteration.
Using Clustered Index.
Index : C_contract_index
Ascending scan.
Positioning by key.
Keys are:
C_contract_no
Using I/O Size 16 Kbytes.
With LRU Buffer Replacement Strategy.


FROM TABLE
C_contract_month
Nested iteration.
Using Clustered Index.
Index : C_contract_month_index
Ascending scan.
Positioning by key.
Keys are:
C_contract_no
C_delivery_month_no
C_delivery_day_no
Using I/O Size 2 Kbytes.
With LRU Buffer Replacement Strategy.


NESTING LEVEL 1 SUBQUERIES FOR STATEMENT 3.


QUERY PLAN FOR SUBQUERY 1 (at nesting level 1 and at line 10).


Correlated Subquery.
Subquery under an IN predicate.

STEP 1
The type of query is SELECT.
Evaluate Ungrouped ANY AGGREGATE.


FROM TABLE
C_daily_stats
dais
EXISTS TABLE : nested iteration.
Using Clustered Index.
Index : C_daily_stats_index
Ascending scan.
Positioning by key.
Keys are:
C_series_no
Using I/O Size 16 Kbytes.
With LRU Buffer Replacement Strategy.


END OF QUERY PLAN FOR SUBQUERY 1.

===

The last bit has a different (faster) showplan on the test servers
STEP 1
The type of query is SELECT.
Evaluate Ungrouped ANY AGGREGATE.


FROM TABLE
C_daily_stats
dais
EXISTS TABLE : nested iteration.
Index : C_daily_stats_index2
Ascending scan.
Positioning by key.
Index contains all needed columns. Base table will not be read.
Keys are:
stats_C_newdate
C_series_no
Using I/O Size 2 Kbytes.
With LRU Buffer Replacement Strategy.


Reply With Quote