我發現了一個表,看起來像這樣:聚集索引improvemens特定查詢
CREATE TABLE [dbo].Table1 (
id INT primary key IDENTITY (1, 1),
[idUser] INT NOT NULL ,
[Amount] INT NOT NULL ,
[Attempts] INT NOT NULL ,
[date] [datetime] NOT NULL ,
[SUM_Amount] INT NOT NULL
) ON [PRIMARY]
此表創建和彙總數據填充由工作一個特定時期。
特殊性:
- 該表將容納一百萬行
- ID用戶是唯一
- sum_Amount運行總量的以前行。
該表格將保持原樣,不更新或刪除或插入操作。 只是這種類型的查詢:
select top (@n) * from table1
order by [SUM_Amount] desc, [Attempts] desc
select top (@n) * from table1
where [SUM_Amount] >[email protected] order by [SUM_Amount] asc
我認爲這將改善性能與更改爲聚集索引這樣的:
CREATE TABLE [dbo].Table2 (
id INT IDENTITY (1, 1),
[idUser] INT NOT NULL ,
[Amount] INT NOT NULL ,
[Attempts] INT NOT NULL ,
[date] [datetime] NOT NULL ,
[SUM_Amount] INT NOT NULL
CONSTRAINT [PK_Nueva]
PRIMARY KEY CLUSTERED ([SUM_Amount] desc, [Attempts] desc, id asc)
) ON [PRIMARY]
,我讀了使用沒有唯一聚集索引將增加4個字節隱藏標識符列(http://msdn.microsoft.com/en-us/library/ms190639(v=sql.90).aspx),所以我決定添加標識(id)到羣集索引(不知道它是否是正確的方法)
我想問(冒着可笑的荒謬聲,但需要確保):
- 怎麼能改進?
- 我會對磁盤大小產生影響嗎?
- 一旦所有數據都被插入,我應該重建索引嗎?
編輯:
關於ID,我覺得是有隻是作爲一個壞習慣。我會保留它,不知道以前的工作如何計算運行總數(我沒有訪問它)
有很多像這樣的表,每天數百(不要問我爲什麼)。這就是爲什麼DBA團隊要求我不要因爲尺寸問題而創建新索引的原因。這就是爲什麼我想通過聚集索引重新排列表結構。同時改變超出正常範圍的數據類型。
在[dba.se](http://dba.stackexchange.com)上詢問此問題可能會得到更好的答案, – Lamak