有這麼多的可能性在這裏,我不知道哪種情況,你打的,和你要在每種情況下要做到:
USE [tempdb];
-- table with a clustered PK
CREATE TABLE dbo.TableA(rec_index INT IDENTITY(1,1) PRIMARY KEY CLUSTERED);
-- table with non-clustered PK
CREATE TABLE dbo.TableB(rec_index INT IDENTITY(1,1) PRIMARY KEY NONCLUSTERED);
-- table with no PK, no indexes
CREATE TABLE dbo.TableC(rec_index INT IDENTITY(1,1));
-- table with no PK, non-clustered non-unique index
CREATE TABLE dbo.TableD(rec_index INT IDENTITY(1,1));
CREATE INDEX d ON dbo.TableD(rec_index);
-- table with no PK, clustered non-unique index
CREATE TABLE dbo.TableE(rec_index INT IDENTITY(1,1));
CREATE CLUSTERED INDEX e ON dbo.TableE(rec_index);
-- table with no PK, non-clustered unique index
CREATE TABLE dbo.TableF(rec_index INT IDENTITY(1,1));
CREATE UNIQUE INDEX f ON dbo.TableF(rec_index);
-- table with no PK, clustered unique index
CREATE TABLE dbo.TableG(rec_index INT IDENTITY(1,1));
CREATE UNIQUE CLUSTERED INDEX g ON dbo.TableG(rec_index);
-- table with unique clustered index, but PK on different column
CREATE TABLE dbo.TableH(rec_index INT IDENTITY(1,1),
b INT PRIMARY KEY NONCLUSTERED);
CREATE UNIQUE CLUSTERED INDEX h ON dbo.TableH(rec_index);
GO
DROP TABLE dbo.TableA,dbo.TableB,dbo.TableC,dbo.TableD,
dbo.TableE,dbo.TableF,dbo.TableG,dbo.TableH;
GO
你當然可以進行檢查每一個從系統元數據的這些方案,並做出相應的反應。但是你需要幫助我們縮小「沒有指數」的含義。
1)是的,它的PRIMARY KEY被索引。當它被聲明爲PK時,它會自動編制索引,2)通過刪除索引,不會丟失實際數據,儘管索引重建可能很耗時,所以您可能仍然希望避免它。你真的想/需要這個單獨的索引嗎? –
*'不過不幸的是,我已經在我的數據庫中創建了一個沒有索引的類似於這樣的表格。'* - 您的意思是您沒有在該表格的腳本中的'PRIMARY KEY'之後指定'CLUSTERED'?或者,也許你沒有指定'PRIMARY KEY'? –
如果你發現一個PK並且它沒有聚集,你想要做什麼?或者聚集索引已經存在,但它不在rec_index列上?一個表只能有一個PK,只有一個聚集索引 - 它們不必是相同的約束/索引。我同意@Andriy--是PK沒有聚集的問題,還是根本沒有PK? –