2009-08-28 47 views
1

我有一個CMS有兩種方法來查詢內容。一個通過id查詢,另一個通過內容的名稱查詢。我應該通過id或name來搜索數據庫上的內容嗎?

ContentManager.Select(12); 

ContentManager.Select("Content Name"); 

我看到的第一個會更快,因爲ID爲索引,不涉及字符串比較的方式。而第二個更容易處理。

由於維護原因,我已經與第二個人一起工作。但是,如果我改變內容名稱,選擇顯然是不會工作了。但是,Id應該只是數據庫級別,並且不可見於CMS表單。

編輯另外,如果內容被刪除並重新插入,字符串選擇將起作用,id選擇不會。

我不能達成這兩種方法之間的共同點。

+2

您是否注意到任何速度問題?您是否已經完成負載測試,以查看CMS是否在預期負載下使用名稱進行了足夠快的響應?您應該能夠向內容名稱列添加索引,但它不會像主鍵一樣快。 – 2009-08-28 18:01:42

回答

1

通過主鍵選擇可以獲得最佳性能,但這並不總是您唯一的動機。您可能可以在內容名稱列中添加一個索引,具體取決於它的寬度和讀/寫比率(取決於您對數據庫有多少控制權,我想)。

判決,如果你有ID,按ID選擇,如果你不這樣做,它不會損壞你的表現,不要使用內容名稱出汗。

+2

PK搜索並不總是最好的...取決於索引。如果PK是五個列寬度爲1000字節的列複合鍵,而另一個索引存在於代理整數鍵只有4個字節寬,則在替代鍵上搜索會更快 – 2009-08-28 18:03:51

+0

@Charles:那麼爲什麼要讓你的主鍵,而不僅僅是一個唯一的約束?我永遠不會這樣做,除非你的數據庫實現總是使用主鍵作爲聚集索引或其他東西。 – Thorarin 2009-08-28 19:07:37

+0

我將我的例子限制在我們對2列進行的非常簡單的討論中,據我所知,它們都唯一地標識了一行。在技​​術上,在這種情況下,'id'是字符串列的代理鍵,如果實際上字符串列唯一標識了該行。 'id'列恰好有聚簇索引,所以你可以做很多奇怪的事情來搞砸主鍵,並使其搜索不太理想?絕對。但是在通常情況下,在整數上使用聚簇索引主鍵時,最有可能是自動遞增的列,因此按ID搜索最快。 – marr75 2009-08-28 19:25:12

1

取決於哪一個索引...所以,是的,你是對的,在這種情況下使用的ID ......如果有需要也按名稱搜索,使用名稱添加另一個索引..

+0

如果那是用於聚集索引的列,「ID」版本仍然會更快。假設你正在檢索整個行。 – Thorarin 2009-08-28 19:09:36

+0

檢索一行,這幾乎沒有關係。如果索引有六個級別,它將是七個IO對六個...爲了檢索兩個聚集索引值之間的整個行集合,聚集索引的速度非常快。 – 2012-02-08 21:27:14

0

ID通常在數據庫中工作得最好。但是,您受CMS的支配,它可能會將這兩個數據存儲在數組中,並使用相同的精確選擇語句。誰知道?查看源代碼並查看發生了什麼。

無論你做什麼,堅持一種風格的所有代碼。

相關問題