There is a DROP INDEX command;

DROP INDEX table_name.index_name

Should work.

It's also possible to disable the index. The pros and cons are discussed here, but the effective point from this article is:

The biggest difference between disabling and dropping an index is whether the metadata and statistics are persisted. If disabled, they are. If dropped, they are not. Make sure you carefully weigh your options before performing either action, and always have a way to recreate the index available.

So in this instance you may want to simply disable the index, collect your stats, then re-enable the index, via:

Disable:

ALTER INDEX index_name ON schema.table_name DISABLE

Enable:

ALTER INDEX index_name ON schema.table_name REBUILD
Answer from dash on Stack Overflow
🌐
Microsoft Learn
learn.microsoft.com › en-us › sql › t-sql › statements › drop-index-transact-sql
DROP INDEX (Transact-SQL) - SQL Server | Microsoft Learn
For more information, see the SQL Server and Azure SQL index architecture and design guide. An index can't be dropped if the filegroup in which it's located is offline or set to read-only. When the clustered index of an indexed view is dropped, all nonclustered indexes and autocreated statistics on the same view are automatically dropped.
Discussions

HOW TO DROP UNIQUE NON CLUSTERED INDEX – SQLServerCentral Forums
Do you intend to recreate the index after dropping the column from the table? If so, you will need to consider whether the index is still unique without it. If it isn't, you'll either need to find another column that makes the index unique, or recreate the index as non-unique. ... Clustered index is the table, so you might want to recreate the index without the column, or you will end up with a heap table. ... Gail Shaw Microsoft Certified Master: SQL Server... More on sqlservercentral.com
🌐 sqlservercentral.com
February 16, 2017
sql server - Adding a Clustered index, should I drop the nonclustered indexes - Database Administrators Stack Exchange
I am adding a clustered index as an online operation to a table that has 3 billion rows. It has taken over 17 hours so far. If I do this again on another table with just as many rows should I first... More on dba.stackexchange.com
🌐 dba.stackexchange.com
May 9, 2018
sql server - Dropping a unique clustered index on identity colum - Database Administrators Stack Exchange
I want to add an additional caution to what Jonathan mentions, about dropping a clustered index leading to effectively re-writing the entire table. When a clustered index exists on a table in SQL Server, the clustered index key is used in every nonclustered index to identify rows. More on dba.stackexchange.com
🌐 dba.stackexchange.com
sql server - Not able to drop non-clustered index - Database Administrators Stack Exchange
I was executing a query to create a non clustered index in one of the table and that has around 43M of rows. It runs more than 1 hour, then I felt something is wrong and have cancelled the query More on dba.stackexchange.com
🌐 dba.stackexchange.com
July 9, 2024
🌐
SQL Server Tutorial
sqlservertutorial.net › home › sql server indexes › sql server drop index
SQL Server DROP INDEX Demonstrated By Practical Examples
April 11, 2020 - DROP INDEX ix_cust_city ON sales.customers, ix_cust_fullname ON sales.customers; Code language: SQL (Structured Query Language) (sql) The sales.customers table now has no non-clustered index: In this tutorial, you have learned how to use the SQL Server DROP INDEX statement to remove one or ...
🌐
TutorialsTeacher
tutorialsteacher.com › sqlserver › modify-delete-indexes
Modify or Delete Indexes in SQL Server
Use the DROP INDEX statement to delete existing clustered and non-clustered indexes. The following SQL command deletes the clustered index CIX_EmpDetails_EmpId on the EmployeeDetails table.
🌐
Sqlespresso
sqlespresso.com › home › performance tuning › sql index creation using drop existing= on
SQL Index Creation Using DROP EXISTING= ON - A Shot of SQLEspresso
February 17, 2021 - When you are making changes to an existing Non-Clustered index SQL Server provides a wide variety of options. One of the more frequently used methods is DROP EXISTING; in this post you will learn all about that option. This option automatically drops an existing index after recreating it, without ...
🌐
MSSQLTips
mssqltips.com › home › drop index in sql server examples
Drop Index in SQL Server Examples
March 28, 2024 - You already have permission if you are in the sysadmin server role or db_ddladmin or db_owner roles in the database. For our examples, we’ll work with a non-clustered index, IX_ExpectedDeliveryDate, on the Purchasing.PurchaseOrders table in the WideWorldImporters sample database. To disable with SQL Server Management Studio (SSMS), expand down to the index in the Object Explorer
🌐
SQLServerCentral
sqlservercentral.com › forums › topic › how-to-drop-unique-non-clustered-index
HOW TO DROP UNIQUE NON CLUSTERED INDEX – SQLServerCentral Forums
February 16, 2017 - Do you intend to recreate the index after dropping the column from the table? If so, you will need to consider whether the index is still unique without it. If it isn't, you'll either need to find another column that makes the index unique, or recreate the index as non-unique. ... Clustered index is the table, so you might want to recreate the index without the column, or you will end up with a heap table. ... Gail Shaw Microsoft Certified Master: SQL Server...
Find elsewhere
🌐
SQL Authority
blog.sqlauthority.com › home › does dropping primary key drop non-clustered index on the column? – interview question of the week #085
Does Dropping Primary Key Drop Non-Clustered Index on the Column? - Interview Question of the Week #085 - SQL Authority with Pinal Dave
August 21, 2016 - Well, the answer in one simple statement – “When you drop the primary key constraint on a column where there is a non-clustered index, it will drop the non-clustered index along the clustered index as well.“
🌐
Brent Ozar Unlimited®
brentozar.com › home › blog › what’s better: disabling vs. dropping indexes?
What's Better: Disabling vs. Dropping Indexes? - Brent Ozar Unlimited®
April 2, 2021 - If SQL Server does a table scan, it has to read all the rows AND columns into memory. If it does an index scan, it’s going to read all the rows – but only the columns in the index. In terms of I/O, a narrower nonclustered index can be less expensive than a clustered index or table scan.
Top answer
1 of 3
8

leave it alone

In most OLTP workloads, the primary key is a surrogate key. This isn't a bad thing, especially because someone came along and decided that GUIDs are the best way to uniquely identify various entities in your application. Sure, I get it, it's hard to run out of GUIDs, but that's about where their helpfulness ends.

Even if you were using integer or big integers to uniquely identify entities, there's a strong chance that an identity column would be in use to assign them. As an example, every table in the Stack Overflow database has a clustered primary key on an identity column, and those values are used to identify:

  • Users who posted questions
  • Users who voted
  • Posts that were voted on
  • Posts that were commented on
  • Comments that will be deleted because comments were a mistake

There's absolutely nothing wrong with surrogate keys, as long as you have sufficient (unique) indexes on the GUID columns that queries will be performing their lookups via.

Having a clustered primary key on an integer or big integer column buys you a few things that using GUIDs does not:

  • Narrow data type (4-8 bytes)
  • Uniqueness
  • Monotonically increasing
  • Non-updated data (insert/delete only)

One of the more important parts -- monotonically increasing -- is often not an attribute when GUIDs are used, because they're usually randomly generated. Very few application developers have the foresight to use NEWSEQUENTIALID() to assign GUIDs in the database, and instead generate them in the application, or just by using NEWID() in the database.

For OLTP workloads, having a clustered index (particularly one that meets the criteria I listed above) is far superior to not having one. Tables without clustered indexes (Heaps) in SQL Server can behave in unexpected ways when updated, or deleted from. If you're interested in this, look up forwarded records, and empty allocated pages in this context.

If you were to use non-sequential GUIDs for a clustered index, you would be making random inserts and doing a lot of data page reshuffling, and logging of that reshuffling. It may not matter when a database is small, but it could certainly start to get annoying for larger tables and indexes.

A common scenario for SQL Server is to have a surrogate unique clustered index on an integer or big integer column, and a non-clustered primary key on the GUID column(s) that make up a unique row. That's what you have currently, so don't worry about changing your tables to suit a different arrangement. Instead, just create unique indexes on your GUID columns where queries will use them. One reason for that arrangement is that clustered index key column(s) are automatically added to non-clustered indexes -- as a key when not unique, and as an include when unique -- so the narrow clustered index is more ideal.

In short, leave it alone. You are barking up the wrong tree for optimizing anything whatsoever about your workload.

2 of 3
4

Clustered indexes and heaps are the base table, where all data is stored. Clustered indexes have the data stored ordered by the cluster key while heaps are generally ordered by their insert order. Nonclustered indexes are a separate beast. But adding or changing a clustered index will require a full rebuild (basically pick up the entire table and put it down again in the new order).

The clustered index (which does not have to be the primary key) determines the order in which rows are stored. If the GUID is randomly generated (i.e. NOT sequential) then it will prove to be a bad cluster key (and not just because of it's datasize). Ideally the cluster key is eternally incrementing.

Personally, given what I know of the table so far, I would have done the same thing, used an integer (or bigint) as the cluster key as a decent compromise and then index the heck out of the GUID or business keys using non-clustered indexes.

Another caveat about heaps is that when records are deleted that the space is not made available to the engine until the heap is rebuilt. This may or may not be of significant concern to you, but is something to keep in mind.

My Advice?

Given that your primary key is a GUID and it's unlikely to be sequential is to leave this as is. The clustered index doesn't take up any more space than a heap and will under most circumstances give you cleaner execution plans than a heap OR the alternative of making the GUID the clustered key.

Storage is cheap and unless you are far outside the curve on I/O and data access patterns you are unlikely to see performance issues around simply having lots of indexes; and I wouldn't start cleanup here, take a look at the other indexes and see if they can be consolidated if you are concerned about that.

🌐
MSSQLTips
mssqltips.com › home › efficiently rebuild sql server clustered indexes with drop_existing
Efficiently Rebuild SQL Server Clustered Indexes with DROP_EXISTING
April 20, 2025 - When re-building a table’s clustered index using a DROP INDEX command followed by a CREATE INDEX command, if a table has non-clustered indexes then all of non-clustered indexes on the table may be automatically rebuilt twice by the SQL Server engine. Once when the clustered index is dropped ...
🌐
SQLServerCentral
sqlservercentral.com › home › topics › sql server 7,2000 › t-sql › dropping a non clustered index
Dropping a Non clustered Index – SQLServerCentral Forums
September 22, 2007 - I am working on dropping unnecessary Non Clustered Indexes on tables in my database. As part (1 of the columns) of these NC indexes, the clustered index (only 1 column Clustered Index) for that table is also included.
🌐
C# Corner
c-sharpcorner.com › UploadFile › a53f1a › index-in-sql-server
CREATE INDEX, DROP INDEX In SQL SERVER
July 1, 2019 - In a SQL Server database there ... The basic syntax of CREATE INDEX is as follows: ... An index can be dropped using the SQL DROP command....
🌐
SQL Authority
blog.sqlauthority.com › home › how to drop clustered index on primary key column? – interview question of the week #084
How to Drop Clustered Index on Primary Key Column? - Interview Question of the Week #084 - SQL Authority with Pinal Dave
August 16, 2016 - Question: How to drop clustered index, which is created on primary key?Answer: If you thought the answer as simple as following script, you are wrong.DROP INDEX PK_Table1_Col1 ON Table1 GO
🌐
SQLServerFast
sqlserverfast.com › home › sql server execution plan reference › clustered index delete
Clustered Index Delete - SQLServerFast
July 6, 2025 - A Clustered Index Delete operator that targets a clustered columnstore index and no additional nonclustered indexes is represented in SSMS (and most other tools) as a Columnstore Index Delete operator in the graphical execution plan.