Puzzle Solved


11/20/2009 11:29:00 AM

I have been really getting into RSS feeds lately and have subscribed to alot of ones that interest me.   I personally have been using the Google Reader on the iGoogle homepage.  It's a neat way to keep tabs on my varied readings.  One that caught my eye was a challenge by Pinal Dave.   Pinal challenged his readers to solve a puzzle that would return the size of each index for a speficied table. 

He started with a simple sp_spaceused [tableName] command that returned the index_size of the table and a selection from sys.indexes that returned a list of all of the indexes on said table.  But it was up to his readers to figure out how to get the index_size of each index, so that the sum of all of them would add up to teh result from sp_spaceused.  Read the article to follow along.  My answer is the 7th down (mine is simpler and suprising different from the other answers).  Pinal will post the solution with due credit on his blog.  Hopefully, I did well, seeing that he has almost 11 million readers.

Here is a quick overview of the puzzle:

My answer was:
DECLARE
      @objname nvarchar(776),
      @id int

SELECT
      @objname = 'TableToExamine',
      @id = object_id(@objname)

SELECT
      i.*,
      CASE
            WHEN ps.usedpages > ps.pages THEN (ps.usedpages - ps.pages)
            ELSE 0
      END * 8 indexsize
FROM sys.indexes i
INNER JOIN (
      SELECT
            OBJECT_ID,
            index_id,
            SUM (used_page_count) usedpages,
            SUM (
                  CASE
                        WHEN (index_id < 2) THEN (in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count)
                        ELSE lob_used_page_count + row_overflow_used_page_count
                  END
            )pages
      FROM sys.dm_db_partition_stats
      WHERE object_id = @id
      GROUP BY object_id, index_id
) ps on i.index_id = ps.index_id
WHERE i.object_id = @id

Well, that wasn't my exact answer.  I had a variable declaration that I really didn't need, but hey, I did it in like 5 mins.  So this version is a little cleaner. :)

ENJOY!  And in the spirit of fun, See if you can do it better!



  • About

    Adam Hutson picture I'm Adam Hutson, a .NET Software Developer & Database Administrator from Springfield, Missouri.

    I'll be blogging about exploring new technologies, books that interest me, and of course, my wonderful family of five.


    linkedin logo facebook logo twitter logo rss symbol
For Rent picture