2012-06-03 105 views
1

什麼是更有效的(更快):兩次存儲相同的鳴叫在Tweet表,一旦user1並再次user2或使用TweetFriend之間的連接得到的結果?最佳實踐,以實現在SQL Server最大性能

Tweet => Id 
     UserId 
     SenderId 
     JSONdata 

User => Id 

Friend => UserId 
      FriendId 

與加盟:

SELECT TOP 20 a.* FROM Tweet a INNER JOIN Friend b ON a.SenderId = b.UserId WHERE b.UserId = {0} 

或者我可以兩次救鳴叫的發送者和接收者,並使用一個簡單的查詢:

SELECT TOP 20 * FROM TWEET WHERE UserId = {0} 

哪一個更快捷,如果加入那麼我應該使用什麼類型的索引,我會很樂意聽到任何建議。

感謝名單

+0

查看[dba.SE](http://dba.stackexchange.com/),它可能更適合您的問題(雖然不確定)。 – Jeroen

+2

高效***如何!?!?***在磁盤使用方面? - >存儲一次並鏈接它。在查詢速度方面?這是搶奪...存儲兩次可能會更快地查詢 - 但你會遇到大量的其他問題(如一致性和維護) - 是否值得呢? –

+0

在查詢速度方面!! – Rawhi

回答

0

存儲你的數據只有一次(鳴叫),你不會有任何一致性問題。除非您將此開發爲一個沉重的OLAP系統(即數據倉庫),否則您應該正常化。