[dba-SQLServer] Placing indexes in a specific file

Billy Pang tuxedo_man at hotmail.com
Sun Jan 23 14:00:03 CST 2005


ooops.. typo in last email... instead of "BOL syntax", it should have read 
"BNF Syntax from BOL"?

>From: "Billy Pang" <tuxedo_man at hotmail.com>
>To: dba-sqlserver at databaseadvisors.com
>Subject: RE: [dba-SQLServer] Placing indexes in a specific file
>Date: Sun, 23 Jan 2005 19:56:35 +0000
>
>Hi John:
>
>To improve disk I/O performance, place data of table and its indexes in 
>separate data files (because less contention for disk resources given the 
>way data is accessed on disk).
>
>The syntax for creating index on specific filegroup is:
>
>"BOL Syntax"
>CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
>    ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )
>[ WITH < index_option > [ ,...n] ]
>[ ON filegroup ]
>
>For example:
>create index ix_myindex on products(product_name) on secondary_file_group;
>
>To store the table in a specific data file, use the ON filegroup at the end 
>of CREATE TABLE statement or create a clustered index of that table in the 
>target filegroup.  The data of a table resides in the same filegroup as its 
>clustered index.
>
>Note: each db has default filegroup.  If you don't specify specific 
>filegroup when you create index/table, then that is where the index/table 
>will reside.
>
>Always create your clustered index first before creating your nonclustered 
>indexes of a table.  This is because physical key in nonclusterd indexes is 
>composed of the clustered index key.  If you create nonclustered index 
>first, and then clustered index, the db will need to rebuild existing 
>nonclusterd indexes of that table (argh!).
>
>Sometimes an existing index on a table helps speed up creation of other 
>indexes on the table.
>
>HTH
>
>Billy
>
>>From: "John W. Colby" <jwcolby at colbyconsulting.com>
>>Reply-To: dba-sqlserver at databaseadvisors.com
>>To: dba-sqlserver at databaseadvisors.com
>>Subject: RE: [dba-SQLServer] Placing indexes in a specific file
>>Date: Sun, 23 Jan 2005 13:47:45 -0500
>>
>>On the same note, is it possible to cause specific tables to be placed in
>>specific files?  I started this database with two 250g hard drives for the
>>data and one 250g hard drive for the log file.  As I ran short of room in
>>the data files (hard drives) I added a new drive and another file, then a
>>fourth drive and file.  I have at this time 4 data drives each with a 
>>single
>>data file, and a log drive with a log file.  Each of these drives has
>>nothing but the SQL Server file on it.
>>
>>I started out with the "big table" of 64 million records, 650 fields.  
>>Since
>>the business requires using almost every field in where clauses, I added a
>>PK field that is an Int - Identity - Increment 1.  I then started creating
>>smaller tables with anywhere from a handful to several dozen fields of
>>related data.  I copied the PK and these fields (data) from the Big Table
>>into the smaller tables, then set indexes on each field.  This work is not
>>complete yet, but I have almost finished creating tables to hold all the
>>sets of related data.  Just as an aside, it takes a few hours to pull the 
>>PK
>>and data out of
>>BigTable and drop it into the smaller table.  I can run many of these at 
>>the
>>same time (do several of the smaller tables at the same time).  Setting up
>>the indexes takes a few minutes to create the indexes in design view, then 
>>a
>>LONG time (many hours) for SQL Server to actually build the indexes.  The
>>more fields I index at once the longer it takes of course.
>>
>>I can just imagine what the data looks like inside the four data files
>>though.  I was thinking that if I could "copy" a specific table from the
>>database into a new file, that the copy might "defrag" that table (get all
>>the data and indexes for it in one place and contiguous).
>>
>>Additionally it would be good from a performance perspective to get each 
>>of
>>these smaller tables into a single drive (file) so that later when I 
>>started
>>joining the tables for analysis (where clauses) I would spread the i/o 
>>over
>>more drives.
>>
>>Any thoughts on this stuff?  Is it possible to determine placement of 
>>tables
>>within a multi-file database?  Ditto indexes?
>>
>>John W. Colby
>>www.ColbyConsulting.com
>>
>>Contribute your unused CPU cycles to a good cause:
>>http://folding.stanford.edu/
>>
>>-----Original Message-----
>>From: dba-sqlserver-bounces at databaseadvisors.com
>>[mailto:dba-sqlserver-bounces at databaseadvisors.com] On Behalf Of John W.
>>Colby
>>Sent: Sunday, January 23, 2005 1:22 PM
>>To: dba-sqlserver at databaseadvisors.com
>>Subject: [dba-SQLServer] Placing indexes in a specific file
>>
>>
>>I believe I have seen references to placing indexes in a specific file for
>>SQL Server in order to speed up the database.  Does anyone know how this
>>might be accomplished (if possible)?  For my nVLDB I now have 685 gb of 
>>data
>>in 4 files, each file on a dedicated hard drive, i.e. nothing on that 
>>drive
>>except that one database file.  I also have a dedicated drive for the log
>>file.  I am reaching the point where I need to add a couple of more drives
>>(and files) because I will run out of room in a few weeks.  It seems like
>>now might be the time to figure out the index file thing if it is 
>>possible.
>>
>>John W. Colby
>>www.ColbyConsulting.com
>>
>>Contribute your unused CPU cycles to a good cause:
>>http://folding.stanford.edu/
>>
>>
>>
>>_______________________________________________
>>dba-SQLServer mailing list
>>dba-SQLServer at databaseadvisors.com
>>http://databaseadvisors.com/mailman/listinfo/dba-sqlserver
>>http://www.databaseadvisors.com
>>
>>
>>
>>
>>_______________________________________________
>>dba-SQLServer mailing list
>>dba-SQLServer at databaseadvisors.com
>>http://databaseadvisors.com/mailman/listinfo/dba-sqlserver
>>http://www.databaseadvisors.com
>>
>





More information about the dba-SQLServer mailing list