title: Changing the indexing on existing table in SQL Server 2000
body: <p>Here is the scenario:</p>
  
  <p>SQL Server 2000 (8.0.2055)</p>
  
  <p>Table currently has 478 million rows of data. The Primary Key column is an INT with IDENTITY. There is an Unique Constraint imposed on two other columns with a Non-Clustered Index. This is a vendor application and we are only responsible for maintaining the DB.</p>
  
  <p>Now the vendor has recommended doing the following "to improve performance"</p>
  
  <ol>
  <li>Drop the PK and Clustered Index</li>
  <li>Drop the non-clustered index on the two columns with the UNIQUE CONSTRAINT</li>
  <li>Recreate the PK, with a NON-CLUSTERED index</li>
  <li>Create a CLUSTERED index on the two columns with the UNIQUE CONSTRAINT</li>
  </ol>
  
  <p>I am not convinced that this is the right thing to do. I have a number of concerns.</p>
  
  <p>By dropping the PK and indexes, you will be creating a heap with 478 million rows of data. Then creating a CLUSTERED INDEX on two columns would be a really mammoth task. Would creating another table with the same structure and new indexing scheme and then copying the data over, dropping the old table and renaming the new one be a better approach?</p>
  
  <p>I am also not sure how the stored procs will react. Will they continue using the cached execution plan, considering that they are not being explicitly recompiled.</p>
  
  <p>I am simply not able to understand what kind of "performance improvement" this change will provide. I think that this will actually have the reverse effect.</p>
  
  <p>All thoughts welcome.</p>
  
  <p>Thanks in advance,</p>
  
  <p>Raj</p>