<?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: SQL SERVER &#8211; Effect of Normalization on Index and Performance</title>
	<atom:link href="http://blog.sqlauthority.com/2009/06/13/sql-server-effect-of-normalization-on-index-and-performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sqlauthority.com/2009/06/13/sql-server-effect-of-normalization-on-index-and-performance/</link>
	<description>Personal Notes of Pinal Dave</description>
	<lastBuildDate>Sun, 12 Feb 2012 09:22:39 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Anand M</title>
		<link>http://blog.sqlauthority.com/2009/06/13/sql-server-effect-of-normalization-on-index-and-performance/#comment-136162</link>
		<dc:creator><![CDATA[Anand M]]></dc:creator>
		<pubDate>Mon, 23 May 2011 06:44:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=5445#comment-136162</guid>
		<description><![CDATA[Hi Pinal Dave Sir ;
  I am Anand from chennai . i  want  how to increase  performance in sqlserver  query .]]></description>
		<content:encoded><![CDATA[<p>Hi Pinal Dave Sir ;<br />
  I am Anand from chennai . i  want  how to increase  performance in sqlserver  query .</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: cecile</title>
		<link>http://blog.sqlauthority.com/2009/06/13/sql-server-effect-of-normalization-on-index-and-performance/#comment-121776</link>
		<dc:creator><![CDATA[cecile]]></dc:creator>
		<pubDate>Fri, 04 Mar 2011 00:31:30 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=5445#comment-121776</guid>
		<description><![CDATA[sir please help me in my assignment using 




o	Identify the strengths and weaknesses of  corrected  5NF definition for relational database design
o	Make a critical analysis and formulate a recommendation of each paper.]]></description>
		<content:encoded><![CDATA[<p>sir please help me in my assignment using </p>
<p>o	Identify the strengths and weaknesses of  corrected  5NF definition for relational database design<br />
o	Make a critical analysis and formulate a recommendation of each paper.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Derek Asirvadem</title>
		<link>http://blog.sqlauthority.com/2009/06/13/sql-server-effect-of-normalization-on-index-and-performance/#comment-57419</link>
		<dc:creator><![CDATA[Derek Asirvadem]]></dc:creator>
		<pubDate>Sun, 08 Nov 2009 01:31:35 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=5445#comment-57419</guid>
		<description><![CDATA[Pinal
A very good precis (given the size, it cannot be expected to provide all the technical info to support the conclusions), and thankyou for busting a common myth propagated by the uneducated and those committed to staying that way.  With 32 years of working as a database consultant (hundreds of P&amp;T assignments), let me say that I agree with your article.

There is just one thing.  That &quot;joins are costly&quot; is also a myth that begs for busting.  Sybase, DBS and MS are over 20 years old, and this particular area has received much engineering attention.  The cost of correct joins is insignificant in terms of the generated query tree.  The real join cost is in (a) the size of the table being joined and (b) the qualified rows that are joined; the Normalised db produces smaller metrics in both cases.  Therefore join cost is substantially lower in Normalised dbs.

I might add that that narrower rows in Normalised databases allow far more rows to reside in the same memory/cache space.  Which leads directly to fewer cache misses and physical I/O.  This point works hand-in-glove with the qualification of rows provided by Clustered indices (which you discuss), further improving overall performance.]]></description>
		<content:encoded><![CDATA[<p>Pinal<br />
A very good precis (given the size, it cannot be expected to provide all the technical info to support the conclusions), and thankyou for busting a common myth propagated by the uneducated and those committed to staying that way.  With 32 years of working as a database consultant (hundreds of P&amp;T assignments), let me say that I agree with your article.</p>
<p>There is just one thing.  That &#8220;joins are costly&#8221; is also a myth that begs for busting.  Sybase, DBS and MS are over 20 years old, and this particular area has received much engineering attention.  The cost of correct joins is insignificant in terms of the generated query tree.  The real join cost is in (a) the size of the table being joined and (b) the qualified rows that are joined; the Normalised db produces smaller metrics in both cases.  Therefore join cost is substantially lower in Normalised dbs.</p>
<p>I might add that that narrower rows in Normalised databases allow far more rows to reside in the same memory/cache space.  Which leads directly to fewer cache misses and physical I/O.  This point works hand-in-glove with the qualification of rows provided by Clustered indices (which you discuss), further improving overall performance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul</title>
		<link>http://blog.sqlauthority.com/2009/06/13/sql-server-effect-of-normalization-on-index-and-performance/#comment-55536</link>
		<dc:creator><![CDATA[Paul]]></dc:creator>
		<pubDate>Wed, 02 Sep 2009 19:51:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=5445#comment-55536</guid>
		<description><![CDATA[I&#039;ve been working on a new normalized database and believe I&#039;ve encountered the issue MLanden was noting and was hoping you could comment on it (trying to figure out the best method to handle this)

TABLE1:
RA_NUMBER_ID (FK, int)
ENTRY_DATE (datetime)
TEST_RESULTS (int (1/0 for pass/fail)
SERIAL_NUMBER_ID (FK, int)


TABLE2: (RA numbers can have multiple tests done to them
RA_NUMBER_ID (PK, int)
RA_NUMBER (varchar) (indexed)

TABLE3: (each RA has 1 set of serials (a 2-pair set), but same serial could exist on multiple RAs)
SERIAL_NUMBER_ID (PK, int)
SERIAL_1 (varchar) (indexed)
SERIAL_2 (varchar) (indexed)


Using the select:
SELECT T2.RA_NUMBER, T3.SERIAL_1, T3.SERIAL_2, T1.ENTRY_DATE, T1.TEST_RESULTS
FROM 
TABLE1 T1 INNER JOIN
TABLE2 T2 ON T2.RA_NUMBER_ID=T1.RA_NUMBER_ID INNER JOIN
TABLE3 T3 ON T3.SERIAL_NUMBER_ID=T1.SERIAL_NUMBER_ID
WHERE
T3.SERIAL_1=&#039;xxx&#039;
OR T3.SERIAL_2=&#039;xxx&#039;
OR T2.RA_NUMBER=&#039;xxx&#039;

Takes a long time to load the data - it appears the indexes get lost once I join the multiple tables together and attempt to query on different indexed elements.
1.6 million records in &quot;table 1&quot; took almost 18 seconds to return 5 rows I was expecting.

Using this query using ONLy 1 table as the lookup condition is much faster:
SELECT T2.RA_NUMBER, T3.SERIAL_1, T3.SERIAL_2, T1.ENTRY_DATE, T1.TEST_RESULTS
FROM 
TABLE1 T1 INNER JOIN
TABLE2 T2 ON T2.RA_NUMBER_ID=T1.RA_NUMBER_ID INNER JOIN
TABLE3 T3 ON T3.SERIAL_NUMBER_ID=T1.SERIAL_NUMBER_ID
WHERE
T3.SERIAL_1=&#039;xxx&#039; OR T3.SERIAL_2=&#039;xxx&#039;
--(removed the &quot;T2.RA_NUMBER&quot; condition)

However, I do need BOTH T3 and T2 conditions as part of my lookup.
I am now using a union query to get the results whcih returns that same details as the 1st query above, but does it in milli-seconds time.
(also utilizes a view to pre-link everything,b ut I cannot use the view to the conditional aspects as it also has a performance hit).
SELECT VW.RA_NUMBER, VW.SERIAL_1, VW.SERIAL_2, VW.ENTRY_DATE, VW.TEST_RESULTS
FROM TABLE_VIEW VW
WHERE VW.TD_RA_OBJID IN 
(
SELECT T1.TD_RAW_OBJID
FROM
      dbo.TABLE_1 AS T1 INNER JOIN
      dbo.TABLE_2 AS T2 with(nolock) ON T2.RA_NUMBER_ID=T1.RA_NUMBER_ID 
WHERE     
T2.RA_NUMBER= &#039;xxx&#039;
UNION
SELECT T1.TD_RAW_OBJID
FROM
      dbo.TABLE_1 AS T1 INNER JOIN
      dbo.TABLE_3 AS T3 with(nolock) ON T3.SERIAL_NUMBER_ID=T1.SERIAL_NUMBER_ID
WHERE     
T3.SERIAL_1= &#039;xxx&#039; OR T3.SERIAL_2=&#039;xxx&#039;
)


I could put it all back together, but then the indexes on the flat table get out of hand and require frequent re-builds (we average around 1000 entries/minute and the indexes are just not keeping up)]]></description>
		<content:encoded><![CDATA[<p>I&#8217;ve been working on a new normalized database and believe I&#8217;ve encountered the issue MLanden was noting and was hoping you could comment on it (trying to figure out the best method to handle this)</p>
<p>TABLE1:<br />
RA_NUMBER_ID (FK, int)<br />
ENTRY_DATE (datetime)<br />
TEST_RESULTS (int (1/0 for pass/fail)<br />
SERIAL_NUMBER_ID (FK, int)</p>
<p>TABLE2: (RA numbers can have multiple tests done to them<br />
RA_NUMBER_ID (PK, int)<br />
RA_NUMBER (varchar) (indexed)</p>
<p>TABLE3: (each RA has 1 set of serials (a 2-pair set), but same serial could exist on multiple RAs)<br />
SERIAL_NUMBER_ID (PK, int)<br />
SERIAL_1 (varchar) (indexed)<br />
SERIAL_2 (varchar) (indexed)</p>
<p>Using the select:<br />
SELECT T2.RA_NUMBER, T3.SERIAL_1, T3.SERIAL_2, T1.ENTRY_DATE, T1.TEST_RESULTS<br />
FROM<br />
TABLE1 T1 INNER JOIN<br />
TABLE2 T2 ON T2.RA_NUMBER_ID=T1.RA_NUMBER_ID INNER JOIN<br />
TABLE3 T3 ON T3.SERIAL_NUMBER_ID=T1.SERIAL_NUMBER_ID<br />
WHERE<br />
T3.SERIAL_1=&#8217;xxx&#8217;<br />
OR T3.SERIAL_2=&#8217;xxx&#8217;<br />
OR T2.RA_NUMBER=&#8217;xxx&#8217;</p>
<p>Takes a long time to load the data &#8211; it appears the indexes get lost once I join the multiple tables together and attempt to query on different indexed elements.<br />
1.6 million records in &#8220;table 1&#8243; took almost 18 seconds to return 5 rows I was expecting.</p>
<p>Using this query using ONLy 1 table as the lookup condition is much faster:<br />
SELECT T2.RA_NUMBER, T3.SERIAL_1, T3.SERIAL_2, T1.ENTRY_DATE, T1.TEST_RESULTS<br />
FROM<br />
TABLE1 T1 INNER JOIN<br />
TABLE2 T2 ON T2.RA_NUMBER_ID=T1.RA_NUMBER_ID INNER JOIN<br />
TABLE3 T3 ON T3.SERIAL_NUMBER_ID=T1.SERIAL_NUMBER_ID<br />
WHERE<br />
T3.SERIAL_1=&#8217;xxx&#8217; OR T3.SERIAL_2=&#8217;xxx&#8217;<br />
&#8211;(removed the &#8220;T2.RA_NUMBER&#8221; condition)</p>
<p>However, I do need BOTH T3 and T2 conditions as part of my lookup.<br />
I am now using a union query to get the results whcih returns that same details as the 1st query above, but does it in milli-seconds time.<br />
(also utilizes a view to pre-link everything,b ut I cannot use the view to the conditional aspects as it also has a performance hit).<br />
SELECT VW.RA_NUMBER, VW.SERIAL_1, VW.SERIAL_2, VW.ENTRY_DATE, VW.TEST_RESULTS<br />
FROM TABLE_VIEW VW<br />
WHERE VW.TD_RA_OBJID IN<br />
(<br />
SELECT T1.TD_RAW_OBJID<br />
FROM<br />
      dbo.TABLE_1 AS T1 INNER JOIN<br />
      dbo.TABLE_2 AS T2 with(nolock) ON T2.RA_NUMBER_ID=T1.RA_NUMBER_ID<br />
WHERE<br />
T2.RA_NUMBER= &#8216;xxx&#8217;<br />
UNION<br />
SELECT T1.TD_RAW_OBJID<br />
FROM<br />
      dbo.TABLE_1 AS T1 INNER JOIN<br />
      dbo.TABLE_3 AS T3 with(nolock) ON T3.SERIAL_NUMBER_ID=T1.SERIAL_NUMBER_ID<br />
WHERE<br />
T3.SERIAL_1= &#8216;xxx&#8217; OR T3.SERIAL_2=&#8217;xxx&#8217;<br />
)</p>
<p>I could put it all back together, but then the indexes on the flat table get out of hand and require frequent re-builds (we average around 1000 entries/minute and the indexes are just not keeping up)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jared</title>
		<link>http://blog.sqlauthority.com/2009/06/13/sql-server-effect-of-normalization-on-index-and-performance/#comment-53119</link>
		<dc:creator><![CDATA[Jared]]></dc:creator>
		<pubDate>Fri, 19 Jun 2009 18:40:38 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=5445#comment-53119</guid>
		<description><![CDATA[In regards to &quot;However, this loss of performance is less compared to the gain which was a result of normalization.&quot;

Is there ever a case where this is not true? Maybe some fringe case where the indexes are as large as the data itself?

Something like a table with Col1 int, Col2 int, Col3 int, Data nvarchar(16) where the 3 (could be more) integers form a primary key. And where the data is hierarchical, i.e. each Col1 has many Col2&#039;s, and each Col2 has many Col3&#039;s, but with each triplet being unique.

SO you could normalize it into 3 tables Col1, Col2, and Col3 with relationship tables Col1_Col2 and Col2_Col3, but would that be faster and use less disk space?]]></description>
		<content:encoded><![CDATA[<p>In regards to &#8220;However, this loss of performance is less compared to the gain which was a result of normalization.&#8221;</p>
<p>Is there ever a case where this is not true? Maybe some fringe case where the indexes are as large as the data itself?</p>
<p>Something like a table with Col1 int, Col2 int, Col3 int, Data nvarchar(16) where the 3 (could be more) integers form a primary key. And where the data is hierarchical, i.e. each Col1 has many Col2&#8242;s, and each Col2 has many Col3&#8242;s, but with each triplet being unique.</p>
<p>SO you could normalize it into 3 tables Col1, Col2, and Col3 with relationship tables Col1_Col2 and Col2_Col3, but would that be faster and use less disk space?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pinaldave</title>
		<link>http://blog.sqlauthority.com/2009/06/13/sql-server-effect-of-normalization-on-index-and-performance/#comment-52987</link>
		<dc:creator><![CDATA[pinaldave]]></dc:creator>
		<pubDate>Sat, 13 Jun 2009 06:03:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=5445#comment-52987</guid>
		<description><![CDATA[If you have same number of index as column, the situation is very similar to having no indexes.]]></description>
		<content:encoded><![CDATA[<p>If you have same number of index as column, the situation is very similar to having no indexes.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Soumya</title>
		<link>http://blog.sqlauthority.com/2009/06/13/sql-server-effect-of-normalization-on-index-and-performance/#comment-52984</link>
		<dc:creator><![CDATA[Soumya]]></dc:creator>
		<pubDate>Sat, 13 Jun 2009 04:31:14 +0000</pubDate>
		<guid isPermaLink="false">http://blog.sqlauthority.com/?p=5445#comment-52984</guid>
		<description><![CDATA[Can you enlighten me upon the performance degradation, if any, in case there is a table with about 10 million records, which has some 30 columns, suppose.

About 15 of the columns reference other tables in the same database. However, upon looking at the indexes, I found that there are about the same number of indexes as the columns.

How is this going to degrade the performance. We are experiencing a huge time of insertions into this table.

Follow me on twitter.
]]></description>
		<content:encoded><![CDATA[<p>Can you enlighten me upon the performance degradation, if any, in case there is a table with about 10 million records, which has some 30 columns, suppose.</p>
<p>About 15 of the columns reference other tables in the same database. However, upon looking at the indexes, I found that there are about the same number of indexes as the columns.</p>
<p>How is this going to degrade the performance. We are experiencing a huge time of insertions into this table.</p>
<p>Follow me on twitter.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

