<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Optimizer Costing 4 &#8211; What is Wrong with this Quote?</title>
	<atom:link href="http://hoopercharles.wordpress.com/2010/12/07/optimizer-costing-4-what-is-wrong-with-this-quote/feed/" rel="self" type="application/rss+xml" />
	<link>http://hoopercharles.wordpress.com/2010/12/07/optimizer-costing-4-what-is-wrong-with-this-quote/</link>
	<description>Miscellaneous Random Oracle Topics: Stop, Think, ... Understand</description>
	<lastBuildDate>Thu, 23 May 2013 04:02:42 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/12/07/optimizer-costing-4-what-is-wrong-with-this-quote/#comment-2313</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Wed, 08 Dec 2010 16:20:21 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=3862#comment-2313</guid>
		<description><![CDATA[Centinul,

Very nice test case!

I think that I need to better clarify this statement:
&quot;or can it also be helpful if during the last statistics collection a table contained 0 rows, and that table (at the time of a SQL statement execution) now contains 220 rows (such a problem was mentioned in the “Expert Oracle Practices” book)?&quot;

What I meant by the above is that statistics were collected on the table when it last contained 0 rows (a victim of the automatic nightly stale statistics collection procedure).  If statistics exist for a table, the default level of dynamic sampling will not cause a dynamic sample of the table to take place when parsing a SQL statement that accesses the table, and that could be a significant problem when the table contains 220 rows later in the day (there is a Metalink article that describes this behavior, but I cannot find it at the moment - the referenced problem/case study starts on page 306 of the &quot;Expert Oracle Practices&quot; book).  Based on tests that I performed, it is still possible that dynamic sampling might take place if parallel query is enabled for the SQL statement and the query is executed in a recent Oracle Database release (see http://hoopercharles.wordpress.com/2010/11/12/dynamic-sampling-changes/ and Metalink ID 1102413.1) - and that agrees with your comment statement.

You supplied a very helpful comment, Centinul.]]></description>
		<content:encoded><![CDATA[<p>Centinul,</p>
<p>Very nice test case!</p>
<p>I think that I need to better clarify this statement:<br />
&#8220;or can it also be helpful if during the last statistics collection a table contained 0 rows, and that table (at the time of a SQL statement execution) now contains 220 rows (such a problem was mentioned in the “Expert Oracle Practices” book)?&#8221;</p>
<p>What I meant by the above is that statistics were collected on the table when it last contained 0 rows (a victim of the automatic nightly stale statistics collection procedure).  If statistics exist for a table, the default level of dynamic sampling will not cause a dynamic sample of the table to take place when parsing a SQL statement that accesses the table, and that could be a significant problem when the table contains 220 rows later in the day (there is a Metalink article that describes this behavior, but I cannot find it at the moment &#8211; the referenced problem/case study starts on page 306 of the &#8220;Expert Oracle Practices&#8221; book).  Based on tests that I performed, it is still possible that dynamic sampling might take place if parallel query is enabled for the SQL statement and the query is executed in a recent Oracle Database release (see <a href="http://hoopercharles.wordpress.com/2010/11/12/dynamic-sampling-changes/" rel="nofollow">http://hoopercharles.wordpress.com/2010/11/12/dynamic-sampling-changes/</a> and Metalink ID 1102413.1) &#8211; and that agrees with your comment statement.</p>
<p>You supplied a very helpful comment, Centinul.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Centinul</title>
		<link>http://hoopercharles.wordpress.com/2010/12/07/optimizer-costing-4-what-is-wrong-with-this-quote/#comment-2291</link>
		<dc:creator><![CDATA[Centinul]]></dc:creator>
		<pubDate>Tue, 07 Dec 2010 19:55:56 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=3862#comment-2291</guid>
		<description><![CDATA[- Is dynamic sampling only helpful in cases involving “large SQL workloads”

I would say no. I say it&#039;s helpful in the cases as defined by Oracle:

&quot;Dynamic sampling augments missing or insufficient optimizer statistics. The optimizer can improve plans by making better estimates for predicate selectivity. Dynamic sampling can supplement statistics such as table block counts, applicable index block counts, table cardinalities (estimated number of rows), and relevant join column statistics.&quot;

Source: http://download.oracle.com/docs/cd/E11882_01/server.112/e16638/stats.htm#CHDBIGII

- can it also be helpful if during the last statistics collection a table contained 0 rows, and that table (at the time of a SQL statement execution) now contains 220 rows (such a problem was mentioned in the “Expert Oracle Practices” book)

I would say it is not helpful in this case either. The documentation states:

&quot;In both the serial and parallel cases, the database performs dynamic sampling when existing statistics are not sufficient:

    *      Missing statistics

      When one or more of the tables in the query do not have statistics, the optimizer gathers basic statistics on these tables before optimization. In this case, the statistics are not as high-quality or as complete as the statistics gathered using the DBMS_STATS package. This tradeoff is made to limit the impact on the compile time of the statement.
   
    *      Collected statistics cannot be used or are likely to lead to poor estimates

      For example, a statement may contain a complex predicate expression, but extended statistics are not available (see &quot;Extended Statistics&quot;). Extended statistics help the optimizer get good quality cardinality estimates for complex predicate expressions. Dynamic sampling can compensate for the lack of extended statistics.&quot;

In this case the table has statistics, even though they are not correct, therefore dynamic sampling won&#039;t kick in in the general case. I imagine there are some exceptions depending on query complexity and such. I did a single table test that agreed with the Oracle documentation:

[code]SQL &gt; SELECT * FROM V$VERSION;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL&gt; CREATE TABLE T AS SELECT * FROM DUAL WHERE 1=0;

Table created.

SQL&gt; SELECT /*+ gather_plan_statistics FINDME1 */ * FROM T;

no rows selected

SQL&gt; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,&#039;ALLSTATS LAST&#039;));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------

SQL_ID  9k684tyna45bn, child number 0
-------------------------------------
SELECT /*+ gather_plan_statistics FINDME1 */ * FROM T

Plan hash value: 1601196873

--------------------------------------------------------------------------
&#124; Id  &#124; Operation         &#124; Name &#124; Starts &#124; E-Rows &#124; A-Rows &#124;   A-Time   &#124;
--------------------------------------------------------------------------
&#124;   0 &#124; SELECT STATEMENT  &#124;      &#124;      1 &#124;        &#124;      0 &#124;00:00:00.01 &#124;
&#124;   1 &#124;  TABLE ACCESS FULL&#124; T    &#124;      1 &#124;      1 &#124;      0 &#124;00:00:00.01 &#124;
--------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


17 rows selected.

SQL&gt; EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,&#039;T&#039;);

PL/SQL procedure successfully completed.

SQL&gt; INSERT INTO T SELECT DUMMY FROM DUAL CONNECT BY LEVEL &lt;= 200;

200 rows created.

SQL&gt; COMMIT;

Commit complete.

SQL&gt; SELECT /*+ gather_plan_statistics FINDME2 */ * FROM T;

&lt;snipped&gt;

200 rows selected.

SQL&gt; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,&#039;ALLSTATS LAST&#039;));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------

SQL_ID  7kc7qr4satk2n, child number 0
-------------------------------------
SELECT /*+ gather_plan_statistics FINDME2 */ * FROM T

Plan hash value: 1601196873

------------------------------------------------------------------------------------
&#124; Id  &#124; Operation         &#124; Name &#124; Starts &#124; E-Rows &#124; A-Rows &#124;   A-Time   &#124; Buffers &#124;
------------------------------------------------------------------------------------
&#124;   0 &#124; SELECT STATEMENT  &#124;      &#124;      1 &#124;        &#124;    200 &#124;00:00:00.01 &#124;      21 &#124;
&#124;   1 &#124;  TABLE ACCESS FULL&#124; T    &#124;      1 &#124;      1 &#124;    200 &#124;00:00:00.01 &#124;      21 &#124;
------------------------------------------------------------------------------------


13 rows selected.

SQL&gt;

SQL&gt; SELECT /*+ gather_plan_statistics dynamic_sampling(t 10) FINDME3 */ * FROM T;

&lt;snipped&gt;

200 rows selected.

SQL&gt; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,&#039;ALLSTATS LAST&#039;));

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------

SQL_ID  dcg54c4fmdh9h, child number 0
-------------------------------------
SELECT /*+ gather_plan_statistics dynamic_sampling(t 10) FINDME3 */ *
FROM T

Plan hash value: 1601196873

------------------------------------------------------------------------------------
&#124; Id  &#124; Operation         &#124; Name &#124; Starts &#124; E-Rows &#124; A-Rows &#124;   A-Time   &#124; Buffers &#124;
------------------------------------------------------------------------------------
&#124;   0 &#124; SELECT STATEMENT  &#124;      &#124;      1 &#124;        &#124;    200 &#124;00:00:00.01 &#124;      21 &#124;
&#124;   1 &#124;  TABLE ACCESS FULL&#124; T    &#124;      1 &#124;      1 &#124;    200 &#124;00:00:00.01 &#124;      21 &#124;
------------------------------------------------------------------------------------


14 rows selected.

SQL&gt;[/code] 

- what is a “large SQL workload”? SQL is a language, so would a large SQL workload be a SQL statement that is 10,000 characters long?

I think a &quot;large SQL workload&quot; is a relative term that is dependent on the hardware capabilities, software, as well as the user application running.]]></description>
		<content:encoded><![CDATA[<p>- Is dynamic sampling only helpful in cases involving “large SQL workloads”</p>
<p>I would say no. I say it&#8217;s helpful in the cases as defined by Oracle:</p>
<p>&#8220;Dynamic sampling augments missing or insufficient optimizer statistics. The optimizer can improve plans by making better estimates for predicate selectivity. Dynamic sampling can supplement statistics such as table block counts, applicable index block counts, table cardinalities (estimated number of rows), and relevant join column statistics.&#8221;</p>
<p>Source: <a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e16638/stats.htm#CHDBIGII" rel="nofollow">http://download.oracle.com/docs/cd/E11882_01/server.112/e16638/stats.htm#CHDBIGII</a></p>
<p>- can it also be helpful if during the last statistics collection a table contained 0 rows, and that table (at the time of a SQL statement execution) now contains 220 rows (such a problem was mentioned in the “Expert Oracle Practices” book)</p>
<p>I would say it is not helpful in this case either. The documentation states:</p>
<p>&#8220;In both the serial and parallel cases, the database performs dynamic sampling when existing statistics are not sufficient:</p>
<p>    *      Missing statistics</p>
<p>      When one or more of the tables in the query do not have statistics, the optimizer gathers basic statistics on these tables before optimization. In this case, the statistics are not as high-quality or as complete as the statistics gathered using the DBMS_STATS package. This tradeoff is made to limit the impact on the compile time of the statement.</p>
<p>    *      Collected statistics cannot be used or are likely to lead to poor estimates</p>
<p>      For example, a statement may contain a complex predicate expression, but extended statistics are not available (see &#8220;Extended Statistics&#8221;). Extended statistics help the optimizer get good quality cardinality estimates for complex predicate expressions. Dynamic sampling can compensate for the lack of extended statistics.&#8221;</p>
<p>In this case the table has statistics, even though they are not correct, therefore dynamic sampling won&#8217;t kick in in the general case. I imagine there are some exceptions depending on query complexity and such. I did a single table test that agreed with the Oracle documentation:</p>
<pre class="brush: plain; title: ; notranslate">SQL &gt; SELECT * FROM V$VERSION;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL&gt; CREATE TABLE T AS SELECT * FROM DUAL WHERE 1=0;

Table created.

SQL&gt; SELECT /*+ gather_plan_statistics FINDME1 */ * FROM T;

no rows selected

SQL&gt; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------

SQL_ID  9k684tyna45bn, child number 0
-------------------------------------
SELECT /*+ gather_plan_statistics FINDME1 */ * FROM T

Plan hash value: 1601196873

--------------------------------------------------------------------------
| Id  | Operation         | Name | Starts | E-Rows | A-Rows |   A-Time   |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |      1 |        |      0 |00:00:00.01 |
|   1 |  TABLE ACCESS FULL| T    |      1 |      1 |      0 |00:00:00.01 |
--------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


17 rows selected.

SQL&gt; EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T');

PL/SQL procedure successfully completed.

SQL&gt; INSERT INTO T SELECT DUMMY FROM DUAL CONNECT BY LEVEL &lt;= 200;

200 rows created.

SQL&gt; COMMIT;

Commit complete.

SQL&gt; SELECT /*+ gather_plan_statistics FINDME2 */ * FROM T;

&lt;snipped&gt;

200 rows selected.

SQL&gt; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------

SQL_ID  7kc7qr4satk2n, child number 0
-------------------------------------
SELECT /*+ gather_plan_statistics FINDME2 */ * FROM T

Plan hash value: 1601196873

------------------------------------------------------------------------------------
| Id  | Operation         | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |      1 |        |    200 |00:00:00.01 |      21 |
|   1 |  TABLE ACCESS FULL| T    |      1 |      1 |    200 |00:00:00.01 |      21 |
------------------------------------------------------------------------------------


13 rows selected.

SQL&gt;

SQL&gt; SELECT /*+ gather_plan_statistics dynamic_sampling(t 10) FINDME3 */ * FROM T;

&lt;snipped&gt;

200 rows selected.

SQL&gt; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST'));

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------

SQL_ID  dcg54c4fmdh9h, child number 0
-------------------------------------
SELECT /*+ gather_plan_statistics dynamic_sampling(t 10) FINDME3 */ *
FROM T

Plan hash value: 1601196873

------------------------------------------------------------------------------------
| Id  | Operation         | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |      1 |        |    200 |00:00:00.01 |      21 |
|   1 |  TABLE ACCESS FULL| T    |      1 |      1 |    200 |00:00:00.01 |      21 |
------------------------------------------------------------------------------------


14 rows selected.

SQL&gt;</pre>
<p>- what is a “large SQL workload”? SQL is a language, so would a large SQL workload be a SQL statement that is 10,000 characters long?</p>
<p>I think a &#8220;large SQL workload&#8221; is a relative term that is dependent on the hardware capabilities, software, as well as the user application running.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/12/07/optimizer-costing-4-what-is-wrong-with-this-quote/#comment-2286</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Tue, 07 Dec 2010 15:44:53 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=3862#comment-2286</guid>
		<description><![CDATA[Centinul,

Very nice research.

One final thought.  Is dynamic sampling only helpful in cases involving &quot;large SQL workloads&quot;, or can it also be helpful if during the last statistics collection a table contained 0 rows, and that table (at the time of a SQL statement execution) now contains 220 rows (such a problem was mentioned in the &quot;Expert Oracle Practices&quot; book)?  For that matter, what is a &quot;large SQL workload&quot;?  SQL is a language, so would a large SQL workload be a SQL statement that is 10,000 characters long?]]></description>
		<content:encoded><![CDATA[<p>Centinul,</p>
<p>Very nice research.</p>
<p>One final thought.  Is dynamic sampling only helpful in cases involving &#8220;large SQL workloads&#8221;, or can it also be helpful if during the last statistics collection a table contained 0 rows, and that table (at the time of a SQL statement execution) now contains 220 rows (such a problem was mentioned in the &#8220;Expert Oracle Practices&#8221; book)?  For that matter, what is a &#8220;large SQL workload&#8221;?  SQL is a language, so would a large SQL workload be a SQL statement that is 10,000 characters long?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Centinul</title>
		<link>http://hoopercharles.wordpress.com/2010/12/07/optimizer-costing-4-what-is-wrong-with-this-quote/#comment-2285</link>
		<dc:creator><![CDATA[Centinul]]></dc:creator>
		<pubDate>Tue, 07 Dec 2010 11:34:14 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=3862#comment-2285</guid>
		<description><![CDATA[&quot;Oracle 10g greatly aided the optimization of large SQL workloads with the introduction of dynamic sampling and root-cause optimization with dbms_stats&quot;

The way I interpret that quote is that it is as if dynamic sampling and dbms_stats were new to 10g.

However, I found references to dynamic sampling as far back as 9.2:

http://download.oracle.com/docs/cd/B10501_01/server.920/a96533/sql_1016.htm#33071

I also found references to dbms_stats as far back as 8.1.7:

http://download.oracle.com/docs/cd/A87860_01/doc/appdev.817/a76936/toc.htm

It doesn&#039;t look like Oracle added the gather_system_stats procedure until 9.0.1:

http://download.oracle.com/docs/cd/A91202_01/901_doc/appdev.901/a89852/dbms_sta.htm#1000574]]></description>
		<content:encoded><![CDATA[<p>&#8220;Oracle 10g greatly aided the optimization of large SQL workloads with the introduction of dynamic sampling and root-cause optimization with dbms_stats&#8221;</p>
<p>The way I interpret that quote is that it is as if dynamic sampling and dbms_stats were new to 10g.</p>
<p>However, I found references to dynamic sampling as far back as 9.2:</p>
<p><a href="http://download.oracle.com/docs/cd/B10501_01/server.920/a96533/sql_1016.htm#33071" rel="nofollow">http://download.oracle.com/docs/cd/B10501_01/server.920/a96533/sql_1016.htm#33071</a></p>
<p>I also found references to dbms_stats as far back as 8.1.7:</p>
<p><a href="http://download.oracle.com/docs/cd/A87860_01/doc/appdev.817/a76936/toc.htm" rel="nofollow">http://download.oracle.com/docs/cd/A87860_01/doc/appdev.817/a76936/toc.htm</a></p>
<p>It doesn&#8217;t look like Oracle added the gather_system_stats procedure until 9.0.1:</p>
<p><a href="http://download.oracle.com/docs/cd/A91202_01/901_doc/appdev.901/a89852/dbms_sta.htm#1000574" rel="nofollow">http://download.oracle.com/docs/cd/A91202_01/901_doc/appdev.901/a89852/dbms_sta.htm#1000574</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Hooper</title>
		<link>http://hoopercharles.wordpress.com/2010/12/07/optimizer-costing-4-what-is-wrong-with-this-quote/#comment-2284</link>
		<dc:creator><![CDATA[Charles Hooper]]></dc:creator>
		<pubDate>Tue, 07 Dec 2010 10:41:00 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=3862#comment-2284</guid>
		<description><![CDATA[Martin,

Impressive answer.  Reading from the start of the quote I identified a couple of other problems with the quote - I will let someone else mention those problems (hint: are those items Oracle Database 10g enhancements?).

Adding to your root cause list, another root cause might be using a different Database edition (or release version) in production than what was used in test (see the four part series http://hoopercharles.wordpress.com/2010/11/21/different-performance-from-standard-edition-and-enterprise-edition-1/ for more information).]]></description>
		<content:encoded><![CDATA[<p>Martin,</p>
<p>Impressive answer.  Reading from the start of the quote I identified a couple of other problems with the quote &#8211; I will let someone else mention those problems (hint: are those items Oracle Database 10g enhancements?).</p>
<p>Adding to your root cause list, another root cause might be using a different Database edition (or release version) in production than what was used in test (see the four part series <a href="http://hoopercharles.wordpress.com/2010/11/21/different-performance-from-standard-edition-and-enterprise-edition-1/" rel="nofollow">http://hoopercharles.wordpress.com/2010/11/21/different-performance-from-standard-edition-and-enterprise-edition-1/</a> for more information).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Martin Berger</title>
		<link>http://hoopercharles.wordpress.com/2010/12/07/optimizer-costing-4-what-is-wrong-with-this-quote/#comment-2282</link>
		<dc:creator><![CDATA[Martin Berger]]></dc:creator>
		<pubDate>Tue, 07 Dec 2010 07:43:54 +0000</pubDate>
		<guid isPermaLink="false">http://hoopercharles.wordpress.com/?p=3862#comment-2282</guid>
		<description><![CDATA[That time let&#039;s start at the end:
* it&#039;s simply wrong to suggest indices are accessed (only) by sequential reads. Also the link between FTS and scattered reads is not that 100% as it could be assumed after reading this sentence. 
* the quality of statistics is not THE root cause for bad execution plans. Probably it&#039;s A root cause, but not the only. I&#039;d like to give you at least 2 other possible root causes: 
(not yet) implemented features in CBO 
complex skewed data: If working with statistics (as CBO is doing) there will always be place for a tuple of data which is not represented by the statistics well and therefore the particular execution plan will be suboptimal.
Just a little starter ;-)]]></description>
		<content:encoded><![CDATA[<p>That time let&#8217;s start at the end:<br />
* it&#8217;s simply wrong to suggest indices are accessed (only) by sequential reads. Also the link between FTS and scattered reads is not that 100% as it could be assumed after reading this sentence.<br />
* the quality of statistics is not THE root cause for bad execution plans. Probably it&#8217;s A root cause, but not the only. I&#8217;d like to give you at least 2 other possible root causes:<br />
(not yet) implemented features in CBO<br />
complex skewed data: If working with statistics (as CBO is doing) there will always be place for a tuple of data which is not represented by the statistics well and therefore the particular execution plan will be suboptimal.<br />
Just a little starter <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>
