<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tim laqua dot com &#187; mssql 2008</title>
	<atom:link href="http://timlaqua.com/tag/mssql-2008/feed/" rel="self" type="application/rss+xml" />
	<link>http://timlaqua.com</link>
	<description>Thoughts and Code from Tim Laqua</description>
	<lastBuildDate>Sun, 09 May 2010 15:25:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Estimating the Size of a Table in SQL Server 2008</title>
		<link>http://timlaqua.com/2009/10/estimating-the-size-of-a-table-in-sql-server-2008/</link>
		<comments>http://timlaqua.com/2009/10/estimating-the-size-of-a-table-in-sql-server-2008/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 02:35:00 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Scripts & Code]]></category>
		<category><![CDATA[msdn]]></category>
		<category><![CDATA[mssql 2008]]></category>
		<category><![CDATA[sql server 2008]]></category>
		<category><![CDATA[tsql]]></category>

		<guid isPermaLink="false">http://timlaqua.com/?p=250</guid>
		<description><![CDATA[I have read this (http://msdn.microsoft.com/en-us/library/ms178085.aspx) article at least 6, maybe 7 times in the past - and every time I say to myself "this is ridiculous - someone has to have written a script to do this by now" and every time, I google for hours and fail to find anything. So I finally gave [...]]]></description>
			<content:encoded><![CDATA[<p>I have read this (<a href="http://msdn.microsoft.com/en-us/library/ms178085.aspx">http://msdn.microsoft.com/en-us/library/ms178085.aspx</a>) article at least 6, maybe 7 times in the past - and every time I say to myself "this is ridiculous - someone has to have written a script to do this by now" and every time, I google for hours and fail to find anything.  So I finally gave up and wrote something to do it.  Note, I've only verified it on 100% fixed width tables.  I compared its output to a 600+ million row table and it came out somewhere around 3% higher - fine with me as I'd rather over-estimate space requirements than under-estimate.<br />
<span id="more-250"></span><br />
First, we have to create a table type to hold our table column definitions.  the datatype is required, length is required for anything that allows length (MAX is not handled for any types), and the worst case scenario is always used so if you know you won't be filling those VARCHAR(255)s, feel free to use a smaller, more average, number.  IsKey is a BIT value that tells the proc to use those columns as part of the index key.  The rest of it is all calculated.</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #0000FF;">CREATE</span> TYPE TableColumnDefinition <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">TABLE</span>
	<span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">NOT</span> <span style="color: #808080;">NULL</span>
	,<span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">INT</span>
	,<span style="color: #808080;">&#91;</span>IsKey<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">BIT</span>
	,<span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">AS</span>
		<span style="color: #0000FF;">CASE</span> 
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'BIT'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">0.125</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'TINYINT'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">1</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'SMALLINT'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">2</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">IN</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #FF0000;">'SMALLMONEY'</span>, <span style="color: #FF0000;">'REAL'</span>, <span style="color: #FF0000;">'SMALLDATETIME'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">4</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">IN</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'BIGINT'</span>, <span style="color: #FF0000;">'DATETIME'</span>, <span style="color: #FF0000;">'MONEY'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'UNIQUEIDENTIFIER'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">16</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'NVARCHAR'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">*</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #000;">2</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'VARCHAR'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">+</span> <span style="color: #000;">2</span>	<span style="color: #008080;">-- DOESN'T SUPPORT MAX</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'DATE'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">3</span> 
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'TIME'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">5</span> <span style="color: #008080;">-- Worst case</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'DATETIME2'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span> <span style="color: #008080;">-- Worst case</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'DATETIMEOFFSET'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">10</span> <span style="color: #008080;">-- Worst case</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'CHAR'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'NCHAR'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">*</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #000;">2</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'BINARY'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'VARBINARY'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">+</span> <span style="color: #000;">2</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Datatype<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'TIMESTAMP'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'XML'</span> <span style="color: #0000FF;">THEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span>	<span style="color: #008080;">-- Estimate an average size in bytes, 2GB max</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">IN</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'DECIMAL'</span>, <span style="color: #FF0000;">'NUMERIC'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">THEN</span> 
				<span style="color: #0000FF;">CASE</span> 
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">1</span> <span style="color: #808080;">AND</span> <span style="color: #000;">9</span>	<span style="color: #0000FF;">THEN</span> <span style="color: #000;">5</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">10</span> <span style="color: #808080;">AND</span> <span style="color: #000;">19</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">9</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">20</span> <span style="color: #808080;">AND</span> <span style="color: #000;">28</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">13</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">29</span> <span style="color: #808080;">AND</span> <span style="color: #000;">38</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">17</span>
				<span style="color: #0000FF;">END</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #FF0000;">'FLOAT'</span> <span style="color: #0000FF;">THEN</span>
				<span style="color: #0000FF;">CASE</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">1</span> <span style="color: #808080;">AND</span> <span style="color: #000;">24</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">4</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #808080;">BETWEEN</span> <span style="color: #000;">25</span> <span style="color: #808080;">AND</span> <span style="color: #000;">53</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>Length<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">IS</span> <span style="color: #808080;">NULL</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">8</span>	<span style="color: #008080;">-- Default n is 53</span>
				<span style="color: #0000FF;">END</span>
			<span style="color: #0000FF;">ELSE</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">END</span>
	,<span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">AS</span>
		<span style="color: #0000FF;">CASE</span> 
			<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span>DataType<span style="color: #808080;">&#93;</span> <span style="color: #808080;">IN</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'VARCHAR'</span>, <span style="color: #FF0000;">'NVARCHAR'</span>, <span style="color: #FF0000;">'VARBINARY'</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">THEN</span> <span style="color: #000;">1</span>
			<span style="color: #0000FF;">ELSE</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">END</span><span style="color: #808080;">&#41;</span></pre></div></div>

<p>Now for the proc that attempts to replicate the methodology outlined on the aforementioned MSDN article.  The results appeared to be accurate or over the actual value, which was exactly what I needed, so I went with it and moved on.  I'm completely open to corrections, suggestions, improvements, etc.  Just make a comment and I'll integrate them (assuming they work <img src='http://timlaqua.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #008080;">/*************************************************************************************
***
*** Procedure:  		[Utility_EstimateClusteredIndexSize]
*** Purpose:		    Estimates the amount of space needed for a given clustered index
*** Methodology:		http://msdn.microsoft.com/en-us/library/ms178085.aspx
***			
***			
*** Author:		      Tim Laqua
*** Date Created:	  2009-10-15 
*** 
*** Revision History
*** Date		Author			Description
*** 2009-10-15	tl				Created
*************************************************************************************/</span>
<span style="color: #0000FF;">ALTER</span> <span style="color: #0000FF;">PROCEDURE</span> <span style="color: #808080;">&#91;</span>dbo<span style="color: #808080;">&#93;</span>.<span style="color: #808080;">&#91;</span>Utility_EstimateClusteredIndexSize<span style="color: #808080;">&#93;</span>
<span style="color: #808080;">&#40;</span>
	 @Num_Rows <span style="color: #0000FF;">FLOAT</span>
	,@ClusteredIndexIsUnique <span style="color: #0000FF;">BIT</span>
	,@Fill_Factor <span style="color: #0000FF;">FLOAT</span>
	,@TableColumn TableColumnDefinition READONLY
<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">AS</span> 
&nbsp;
<span style="color: #0000FF;">SET</span> <span style="color: #0000FF;">NOCOUNT</span> <span style="color: #0000FF;">ON</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span>
	 @Num_Cols <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>					<span style="color: #008080;">-- total number of columns (fixed-length and variable-length)</span>
	,@Fixed_Data_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>			<span style="color: #008080;">-- total byte size of all fixed-length columns</span>
	,@Num_Variable_Cols <span style="color: #0000FF;">FLOAT</span>	<span style="color: #808080;">=</span> <span style="color: #000;">0</span>			<span style="color: #008080;">-- number of variable-length columns</span>
	,@Max_Var_Size <span style="color: #0000FF;">FLOAT</span>	<span style="color: #808080;">=</span> <span style="color: #000;">0</span>				<span style="color: #008080;">-- maximum byte size of all variable-length columns</span>
	,@Variable_Data_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">TABLE</span>
	<span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>Name<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">64</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">FLOAT</span>
	,<span style="color: #808080;">&#91;</span>DisplayValue<span style="color: #808080;">&#93;</span> <span style="color: #0000FF;">AS</span>
		<span style="color: #0000FF;">CASE</span>
			<span style="color: #0000FF;">WHEN</span> <span style="color: #FF00FF;">LOWER</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>Name<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">LIKE</span> <span style="color: #FF0000;">'%size%'</span> <span style="color: #808080;">OR</span> <span style="color: #FF00FF;">LOWER</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>Name<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">LIKE</span> <span style="color: #FF0000;">'%space%'</span> <span style="color: #0000FF;">THEN</span>
				<span style="color: #0000FF;">CASE</span> 
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span> <span style="color: #808080;">&lt;</span> <span style="color: #000;">1024</span> <span style="color: #0000FF;">THEN</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">ROUND</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span>, <span style="color: #000;">3</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">NUMERIC</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span>,<span style="color: #000;">0</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' B'</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span> <span style="color: #808080;">&lt;</span> <span style="color: #000;">1024</span><span style="color: #808080;">*</span><span style="color: #000;">1024</span> <span style="color: #0000FF;">THEN</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">ROUND</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span>, <span style="color: #000;">3</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">NUMERIC</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span>,<span style="color: #000;">3</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' KB'</span>
					<span style="color: #0000FF;">WHEN</span> <span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span> <span style="color: #808080;">&lt;</span> <span style="color: #000;">1024</span><span style="color: #808080;">*</span><span style="color: #000;">1024</span><span style="color: #808080;">*</span><span style="color: #000;">1024</span> <span style="color: #0000FF;">THEN</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">ROUND</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span>, <span style="color: #000;">3</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">NUMERIC</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span>,<span style="color: #000;">3</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' MB'</span>
					<span style="color: #0000FF;">ELSE</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">ROUND</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span><span style="color: #808080;">/</span><span style="color: #000;">1024</span>, <span style="color: #000;">3</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">NUMERIC</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span>,<span style="color: #000;">3</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> <span style="color: #FF0000;">' GB'</span>
				<span style="color: #0000FF;">END</span>
			<span style="color: #0000FF;">ELSE</span> <span style="color: #0000FF;">CAST</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">FLOOR</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span><span style="color: #0000FF;">VALUE</span><span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span> <span style="color: #0000FF;">AS</span> <span style="color: #0000FF;">VARCHAR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">16</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
		<span style="color: #0000FF;">END</span><span style="color: #808080;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #008080;">-- Leaf level data</span>
<span style="color: #0000FF;">SELECT</span> 
	 @Num_Variable_Cols <span style="color: #808080;">=</span> <span style="color: #FF00FF;">COUNT</span><span style="color: #808080;">&#40;</span><span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>
	,@Max_Var_Size <span style="color: #808080;">=</span> IS<span style="color: #808080;">NULL</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUM</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">FROM</span> @TableColumn <span style="color: #0000FF;">WHERE</span> <span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #0000FF;">SELECT</span> 
	 @Num_Cols <span style="color: #808080;">=</span> <span style="color: #FF00FF;">COUNT</span><span style="color: #808080;">&#40;</span><span style="color: #000;">1</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> @Num_Variable_Cols
	,@Fixed_Data_Size <span style="color: #808080;">=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span>IS<span style="color: #808080;">NULL</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUM</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">FROM</span> @TableColumn <span style="color: #0000FF;">WHERE</span> <span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
&nbsp;
&nbsp;
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Fixed_Data_Size'</span>, @Fixed_Data_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">IF</span> @ClusteredIndexIsUnique <span style="color: #808080;">&lt;&gt;</span> <span style="color: #000;">0</span>
<span style="color: #0000FF;">BEGIN</span>
	<span style="color: #0000FF;">SET</span> @Num_Cols <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
	<span style="color: #0000FF;">IF</span> @Num_Variable_Cols <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">SET</span> @Num_Variable_Cols <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
	<span style="color: #0000FF;">IF</span> @Max_Var_Size <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">SET</span> @Max_Var_Size <span style="color: #808080;">+=</span> <span style="color: #000;">4</span>
<span style="color: #0000FF;">END</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Null_Bitmap <span style="color: #0000FF;">INT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span><span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #808080;">&#40;</span><span style="color: #808080;">&#40;</span>@Num_Cols <span style="color: #808080;">+</span> <span style="color: #000;">7</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">/</span> <span style="color: #000;">8</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Null_Bitmap'</span>, @Null_Bitmap<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #008080;">-- if there are variable columns</span>
<span style="color: #0000FF;">IF</span> @Num_Variable_Cols <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
	<span style="color: #0000FF;">SET</span> @Variable_Data_Size <span style="color: #808080;">=</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #808080;">&#40;</span>@Num_Variable_Cols <span style="color: #808080;">*</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> @Max_Var_Size 
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Cols'</span>, @Num_Cols<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Variable_Cols'</span>, @Num_Variable_Cols<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Max_Var_Size'</span>, @Max_Var_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Row_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span>@Fixed_Data_Size <span style="color: #808080;">+</span> @Variable_Data_Size <span style="color: #808080;">+</span> @Null_Bitmap <span style="color: #808080;">+</span> <span style="color: #000;">4</span> <span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Row_Size'</span>, @Row_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Rows_Per_Page <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">FLOOR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">8096</span> <span style="color: #808080;">/</span> <span style="color: #808080;">&#40;</span>@Row_Size <span style="color: #808080;">+</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Rows_Per_Page'</span>, @Rows_Per_Page<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Free_Rows_Per_Page <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">FLOOR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">8096</span> <span style="color: #808080;">*</span> <span style="color: #808080;">&#40;</span><span style="color: #808080;">&#40;</span><span style="color: #000;">100</span> <span style="color: #808080;">-</span> @Fill_Factor<span style="color: #808080;">&#41;</span> <span style="color: #808080;">/</span> <span style="color: #000;">100</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">/</span> <span style="color: #808080;">&#40;</span>@Row_Size <span style="color: #808080;">+</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Free_Rows_Per_Page'</span>, @Free_Rows_Per_Page<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Num_Leaf_Pages <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span>@Num_Rows <span style="color: #808080;">/</span> <span style="color: #808080;">&#40;</span>@Rows_Per_Page <span style="color: #808080;">-</span> @Free_Rows_Per_Page<span style="color: #808080;">&#41;</span> <span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Leaf_Pages'</span>, @Num_Leaf_Pages<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Leaf_space_used <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">8192</span> <span style="color: #808080;">*</span> @Num_Leaf_Pages
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Leaf_space_used'</span>, @Leaf_space_used<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #008080;">-- Index Information</span>
<span style="color: #0000FF;">DECLARE</span>
	 @Num_Key_Cols <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>			<span style="color: #008080;">-- total number of key columns (fixed-length and variable-length)</span>
	,@Fixed_Key_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>			<span style="color: #008080;">-- total byte size of all fixed-length key columns</span>
	,@Num_Variable_Key_Cols <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>	<span style="color: #008080;">-- number of variable-length key columns</span>
	,@Max_Var_Key_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>		<span style="color: #008080;">-- maximum byte size of all variable-length key columns</span>
&nbsp;
&nbsp;
<span style="color: #0000FF;">SELECT</span> 
	 @Num_Variable_Key_Cols <span style="color: #808080;">=</span> <span style="color: #FF00FF;">COUNT</span><span style="color: #808080;">&#40;</span><span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>
	,@Max_Var_Key_Size <span style="color: #808080;">=</span> IS<span style="color: #808080;">NULL</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUM</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">FROM</span> @TableColumn 
<span style="color: #0000FF;">WHERE</span> 
	<span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span> 
	<span style="color: #808080;">AND</span> <span style="color: #808080;">&#91;</span>IsKey<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #0000FF;">SELECT</span> 
	 @Num_Key_Cols <span style="color: #808080;">=</span> <span style="color: #FF00FF;">COUNT</span><span style="color: #808080;">&#40;</span><span style="color: #000;">1</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> @Num_Variable_Key_Cols
	,@Fixed_Key_Size <span style="color: #808080;">=</span> IS<span style="color: #808080;">NULL</span><span style="color: #808080;">&#40;</span><span style="color: #FF00FF;">SUM</span><span style="color: #808080;">&#40;</span><span style="color: #808080;">&#91;</span>DataLength<span style="color: #808080;">&#93;</span><span style="color: #808080;">&#41;</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">FROM</span> @TableColumn 
<span style="color: #0000FF;">WHERE</span> 
	<span style="color: #808080;">&#91;</span>IsVariableLength<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
	<span style="color: #808080;">AND</span> <span style="color: #808080;">&#91;</span>IsKey<span style="color: #808080;">&#93;</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #0000FF;">IF</span> @ClusteredIndexIsUnique <span style="color: #808080;">&lt;&gt;</span> <span style="color: #000;">0</span>
<span style="color: #0000FF;">BEGIN</span>
	<span style="color: #0000FF;">SET</span> @Num_Key_Cols <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
	<span style="color: #0000FF;">IF</span> @Num_Variable_Key_Cols <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">SET</span> @Num_Variable_Key_Cols <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
	<span style="color: #0000FF;">IF</span> @Max_Var_Key_Size <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
		<span style="color: #0000FF;">SET</span> @Max_Var_Key_Size <span style="color: #808080;">+=</span> <span style="color: #000;">4</span>
<span style="color: #0000FF;">END</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Variable_Key_Cols'</span>, @Num_Variable_Key_Cols<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Max_Var_Key_Size'</span>, @Max_Var_Key_Size<span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Key_Cols'</span>, @Num_Key_Cols<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #008080;">-- Who would seriously have a nullable key column?  ridiculous.</span>
<span style="color: #0000FF;">DECLARE</span> @Index_Null_Bitmap <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #808080;">&#40;</span><span style="color: #808080;">&#40;</span>@Num_Key_Cols <span style="color: #808080;">+</span> <span style="color: #000;">7</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">/</span> <span style="color: #000;">8</span><span style="color: #808080;">&#41;</span> 
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Index_Null_Bitmap'</span>, @Index_Null_Bitmap<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Variable_Key_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
&nbsp;
<span style="color: #0000FF;">IF</span> @Max_Var_Key_Size <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
	<span style="color: #0000FF;">SET</span> @Variable_Key_Size <span style="color: #808080;">=</span> <span style="color: #000;">2</span> <span style="color: #808080;">+</span> <span style="color: #808080;">&#40;</span>@Num_Variable_Key_Cols <span style="color: #808080;">*</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span> <span style="color: #808080;">+</span> @Max_Var_Key_Size 
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Variable_Key_Size'</span>, @Variable_Key_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Index_Row_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> @Fixed_Key_Size <span style="color: #808080;">+</span> @Variable_Key_Size <span style="color: #808080;">+</span> @Index_Null_Bitmap <span style="color: #808080;">+</span> <span style="color: #000;">1</span> <span style="color: #808080;">+</span> <span style="color: #000;">6</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Index_Row_Size'</span>,@Index_Row_Size <span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Index_Rows_Per_Page  <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #FF00FF;">FLOOR</span><span style="color: #808080;">&#40;</span><span style="color: #000;">8096</span> <span style="color: #808080;">/</span> <span style="color: #808080;">&#40;</span>@Index_Row_Size <span style="color: #808080;">+</span> <span style="color: #000;">2</span><span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Index_Rows_Per_Page'</span>, @Index_Rows_Per_Page<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Non_Leaf_Levels <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #008080;">-- Log base @Non_Leaf_Levels hack</span>
<span style="color: #0000FF;">WHILE</span> <span style="color: #808080;">&#40;</span>@Num_Leaf_Pages <span style="color: #808080;">/</span> @Index_Rows_Per_Page<span style="color: #808080;">&#41;</span> <span style="color: #808080;">&gt;</span> <span style="color: #FF00FF;">POWER</span><span style="color: #808080;">&#40;</span>@Index_Rows_Per_Page,@Non_Leaf_Levels<span style="color: #808080;">&#41;</span>
	<span style="color: #0000FF;">SET</span> @Non_Leaf_Levels <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
&nbsp;
<span style="color: #0000FF;">SET</span> @Non_Leaf_Levels <span style="color: #808080;">+=</span> <span style="color: #000;">1</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Non_Leaf_Levels'</span>, @Non_Leaf_Levels<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #008080;">-- Summation hack</span>
<span style="color: #0000FF;">DECLARE</span> 
	 @Num_Index_Pages <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">0</span>
	,@Summand <span style="color: #0000FF;">INT</span> <span style="color: #808080;">=</span> @Non_Leaf_Levels
&nbsp;
<span style="color: #0000FF;">WHILE</span> @Summand <span style="color: #808080;">&gt;</span> <span style="color: #000;">0</span>
<span style="color: #0000FF;">BEGIN</span>
	<span style="color: #0000FF;">SET</span> @Num_Index_Pages <span style="color: #808080;">+=</span> <span style="color: #FF00FF;">CEILING</span><span style="color: #808080;">&#40;</span>@Num_Leaf_Pages<span style="color: #808080;">/</span><span style="color: #FF00FF;">POWER</span><span style="color: #808080;">&#40;</span>@Index_Rows_Per_Page, @Summand<span style="color: #808080;">&#41;</span><span style="color: #808080;">&#41;</span>
	<span style="color: #0000FF;">SET</span> @Summand <span style="color: #808080;">-=</span> <span style="color: #000;">1</span>
<span style="color: #0000FF;">END</span>
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Num_Index_Pages'</span>, @Num_Index_Pages<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Index_Space_Used <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> <span style="color: #000;">8192</span> <span style="color: #808080;">*</span> @Num_Index_Pages 
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Index_Space_Used'</span>, @Index_Space_Used<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">DECLARE</span> @Clustered_Index_Size <span style="color: #0000FF;">FLOAT</span> <span style="color: #808080;">=</span> @Leaf_Space_Used <span style="color: #808080;">+</span> @Index_Space_used
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @<span style="color: #FF00FF;">VAR</span> <span style="color: #0000FF;">VALUES</span> <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'@Clustered_Index_Size'</span>, @Clustered_Index_Size<span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">SELECT</span> <span style="color: #808080;">*</span> <span style="color: #0000FF;">FROM</span> @<span style="color: #FF00FF;">VAR</span></pre></div></div>

<p>Now for an example of how to run this doodad.  This particular estimate was for a staging table - I needed the UNIQUEIDENTIFER as the key and the CreatedTime field had to be part of the clustered index for the partition scheme.</p>

<div class="wp_syntax"><div class="code"><pre class="tsql" style="font-family:monospace;"><span style="color: #0000FF;">DECLARE</span> @TableColumn TableColumnDefinition
&nbsp;
<span style="color: #0000FF;">INSERT</span> <span style="color: #0000FF;">INTO</span> @TableColumn
<span style="color: #0000FF;">VALUES</span> 
	 <span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'UNIQUEIDENTIFIER'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'DATETIME'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">1</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
	,<span style="color: #808080;">&#40;</span><span style="color: #FF0000;">'INT'</span>, <span style="color: #808080;">NULL</span>, <span style="color: #000;">0</span><span style="color: #808080;">&#41;</span>
&nbsp;
<span style="color: #0000FF;">EXEC</span> <span style="color: #808080;">&#91;</span>dbo<span style="color: #808080;">&#93;</span>.<span style="color: #808080;">&#91;</span>Utility_EstimateClusteredIndexSize<span style="color: #808080;">&#93;</span>	
 @Num_Rows <span style="color: #808080;">=</span> <span style="color: #000;">750000</span>		<span style="color: #008080;">-- number of rows in the table</span>
,@ClusteredIndexIsUnique <span style="color: #808080;">=</span> <span style="color: #000;">1</span> 	<span style="color: #008080;">-- is it?</span>
,@Fill_Factor <span style="color: #808080;">=</span> <span style="color: #000;">90</span>			<span style="color: #008080;">-- page fill factor</span>
,@TableColumn <span style="color: #808080;">=</span> @TableColumn	<span style="color: #008080;">-- definition of table columns</span></pre></div></div>

<p>As for what the output looks like, I wanted it to output all the variables used so I could validate along the way with th emanual method.  The results look something like this</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Name                                                             Value                  DisplayValue
---------------------------------------------------------------- ---------------------- -------------------
@Fixed_Data_Size                                                 60                     60 B
@Null_Bitmap                                                     5                      5
@Num_Cols                                                        12                     12
@Num_Variable_Cols                                               0                      0
@Max_Var_Size                                                    0                      0 B
@Row_Size                                                        69                     69 B
@Rows_Per_Page                                                   114                    114
@Free_Rows_Per_Page                                              11                     11
@Num_Leaf_Pages                                                  7282                   7282
@Leaf_space_used                                                 59654144               56.891 MB
@Num_Variable_Key_Cols                                           0                      0
@Max_Var_Key_Size                                                0                      0 B
@Num_Key_Cols                                                    3                      3
@Index_Null_Bitmap                                               3.25                   3
@Variable_Key_Size                                               0                      0 B
@Index_Row_Size                                                  34.25                  34 B
@Index_Rows_Per_Page                                             223                    223
@Non_Leaf_Levels                                                 2                      2
@Num_Index_Pages                                                 34                     34
@Index_Space_Used                                                278528                 272.000 KB
@Clustered_Index_Size                                            59932672               57.156 MB</pre></div></div>

<p>So now you may ask "but what about estimating Non-Clustered Indexes and Heaps?"  Well, good question as this is the methodology for estimating the size of a Clustered Index.  I ran this for a fact table with two non-clustered indexes in addition to the clustered index by basically defining the index (so pretending the index was a table for the purposes of this proc - included columns would just be non-key columns).  All in all, it came out +3.31% on 600+ million rows, so I called that methodology good enough <img src='http://timlaqua.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://timlaqua.com/2009/10/estimating-the-size-of-a-table-in-sql-server-2008/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
