|  This section examines the syntax used to create indexes using T-SQL. It is important to be familiar with this syntax as indexes are one of the more volatile database objects, often being dropped and re-created for performance reasons. To accommodate re-creation of indexes, it is common practice to script these actions using T-SQL.   The Transact-SQL  CREATE INDEX  Syntax  Indexes are created using the  CREATE INDEX  command. Listing 13.1 shows the complete  CREATE INDEX  syntax.   Listing 13.1 The  CREATE INDEX  Syntax  CREATE [ UNIQUE ] [ CLUSTERED  NONCLUSTERED ] INDEX  index_name  ON {  table   view  } (  column  [ ASC  DESC ] [  ,...   n  ] ) [ WITH < index_option > [  ,...   n  ] ] [ ON  filegroup  ] < index_option > :: =     { PAD_INDEX          FILLFACTOR  =   fillfactor  IGNORE_DUP_KEY          DROP_EXISTING      STATISTICS_NORECOMPUTE      SORT_IN_TEMPDB }  Table 13.1 lists the  CREATE INDEX  arguments.   Table 13.1. Arguments for  CREATE INDEX      | Argument | Explanation |   | UNIQUE | Specifies that no duplicate rows be allowed. If duplicate rows exist in the data, the index creation fails. |   | CLUSTERED     NON-CLUSTERED | Defines the index as clustered or nonclustered. Non-clustered is the default. Only one clustered index is allowed. |   | index_name | Specifies the name of the index to be created. |   | table     view | Specifies the name of the table or view on which the index is to be based. |   | column | Specifies the column or columns that are to be indexed. |   | ASC     DESC | Specifies whether the index should be sorted in ascending or descending order.  ASC  is the default. |   | ON    Filegroup | Determines on which filegroup the index should be stored. |   | PAD_INDEX | Specifies that a percentage of space should be left free on the non-leaf levels of the index. The percentage is determined by  FILLFACTOR  . |   | FILLFACTOR =    fillfactor | Specifies what percentage to fill the leaf pages of the index on index creation. If inserts and updates are expected on the indexed columns, specifying a  FILLFACTOR  of less than  100  can improve performance by avoiding page splits . Valid values are  1  “  100  ; the default of   indicates a 100% fill. |   | IGNORE_DUP_KEY | Used in conjunction with  UNIQUE  . If specified, and an attempt is made to insert a duplicate key in a  UNIQUE  index, the duplicate key is rejected, but the statement continues. If not specified, the entire statement is rolled back when a duplicate key is encountered . |   | DROP_EXISTING | Used to re-create existing indexes. A performance gain can be realized when a clustered index is rebuilt, as the non-clustered indexes are not rebuilt unless the clustered keys change. |   | STATISTICS_NO_RECOMPUTE | Specifies that index statistics will not be automatically updated. |   | SORT_IN_TEMPDB | Stores the intermediate sort results used to create the index in  tempdb  . This increases disk space usage, but can improve index creation performance if  tempdb  is on a separate disk set than the user database. |   Examples of Using Transact-SQL to Create Indexes  When creating an index in the current database, on the default filegroup, the minimum required syntax would be as follows :   CREATE INDEX emp_tel_idx ON employee (phone)   This creates a nonclustered index named  emp_tel_idx  on the phone column of the employee table.   Often, for performance reasons, it is best to separate the index from the table data. To do this, you specify a filegroup on which to create the index:   CREATE INDEX emp_tel_idx ON employee (phone)  ON index_fg1   A more complete script to create a unique clustered index that specifies several optional arguments is illustrated by the following example:   CREATE UNIQUE CLUSTERED INDEX emp_tel_idx  ON employee(phone) WITH PAD_INDEX, FILLFACTOR = 50, IGNORE_DUP_KEY, STATISTICS_NORECOMPUTE ON index_fg1    |