2013-03-15 92 views
1

在我的網站中,我不創建用戶。用戶被/創建在不同的系統中,我無法訪問。未使用的索引對性能的影響

在那裏,他們用一個用戶ID = VARCHAR(50)

在我的身邊,我保持一個非常簡單的表格,像

UserId VARCHAR(50) 
Employer VARCHAR(4) 
UserSpecificField VARCHAR(8) 
DateWhenItWasAddedToOurSystem DATETIME 

在登錄到我的系統,我只是做一個簡單的SYNC,所以我也有我的系統中的每個人。 我在這張表中獲得了2000條記錄。

問題:

我知道索引是好的,應該使用它。我正在考慮在此表中添加一個索引列,但我不確定這是否有幫助。

即使您不將該列用於任何事情,是否正在添加可幫助提升性能的索引?因爲我在任何地方都使用USER,所以我不得不使用用戶的VARCHAR(50)ID來創建SQL JOIN。

謝謝

+0

你對'UserId'或'UserId'是否有索引?有了2000個條目,索引不會顯着提升您的應用程序。但是,加入或查詢索引時索引將有所幫助。還有其他依賴項:用戶表中使用了哪些其他列,更新用戶表的頻率等。順便說一句,從未使用的列索引只是插入,更新和刪除的性能負擔。 – Claude 2013-03-15 09:12:22

+0

在這一點上我沒有任何索引在這張桌子上。但是有一個1mil記錄的表,使用UserId Varchar(50)col – Ash 2013-03-15 09:14:44

+0

與這個表結合在一起。在這些情況下,'UserId'上的索引(或者更好的主鍵約束)將有助於避免整個表掃描。在添加索引測試查詢計劃之前,添加索引並再次測試查詢計劃。 – Claude 2013-03-15 09:22:25

回答

0

把旁邊的小桌子大小,還有在此結構的表對用戶ID添加索引是沒有意義的。請注意,此列(由於varchar(50)字段平均填充50%),此單列將佔表大小的70%。 因此,數據庫引擎必須首先掃描索引(它幾乎與enitre表的大小相同),然後在表中查找記錄。這個操作比只掃描一個表會更耗費資源。我很肯定,優化器根本不會使用索引。自己測試一下。 在我看來,唯一的選擇是添加一個聚集索引,它實際上是通過UserId對你的表進行「排序」,使得查詢運行得更快,並且不會通過構建附加結構(即「普通」索引)產生任何開銷。我認爲更新操作不經常執行。

create unique clustered index idxCLU__userid on <your_table_name>(UserId)