什麼是更好的額外查詢或額外的數據庫列中的數據將可用的時間更少。什麼是更好的額外查詢或數據庫中的額外列?
例如:在子用戶管理的情況下,我要在主用戶表中添加一個額外的列super_user_id,如果用戶類型是sub_user並且默認列值是-1,或者我創建新表並管理子用戶,表。
但在登錄的情況下,我不得不在兩個表中搜索,我必須再做一個查詢。
感謝
什麼是更好的額外查詢或額外的數據庫列中的數據將可用的時間更少。什麼是更好的額外查詢或數據庫中的額外列?
例如:在子用戶管理的情況下,我要在主用戶表中添加一個額外的列super_user_id,如果用戶類型是sub_user並且默認列值是-1,或者我創建新表並管理子用戶,表。
但在登錄的情況下,我不得不在兩個表中搜索,我必須再做一個查詢。
感謝
沒有一般的答案;你必須更具體。我只能提供一般原則。
其他所有情況相同,出於多種原因,使用沒有冗餘信息的規範化數據庫會更好。但有些情況下,冗餘信息可以節省您的程序很多時間。一個例子是使用Markdown格式化的文本:您需要存儲原始標記以允許進行編輯,但是每次需要輸出時格式化源代碼可能對系統造成極大的負擔。因此,您可能會添加冗餘列來存儲格式化的輸出,並承擔額外的責任,確保該列保持最新狀態。
我所知道的情況是,假設的額外列將保存查詢。唯一正確的答案是,除非您知道保存一個查詢的性能優勢可以彌補它,否則應該保持表的清潔和最小化。請記住,過早優化是所有惡意的根源 - 您可能會發現應用程序的運行速度足夠快。如果在分析時發現額外查詢是一個重大瓶頸,那麼您可以考慮添加該列。
同樣,如果不瞭解您的情況,就不可能提供具體或具體的建議,但我希望我至少幫助您做出決定。
Thom是正確的。你只需要減輕例如冗餘數據以及它將如何進一步走下坡路。從個人的經驗來看,我從大約10張桌子變成了大約6張桌子,有了一些冗餘數據。它還爲我節省了很多額外的編碼,以便從不同的表格獲取信息等等。 – Steven 2009-11-13 09:12:32
你的意思是計算在您的查詢與存儲的計算值的值?
這取決於它將被更新的頻率,數據的大小以及需要的頻率。可能沒有理論上的最佳答案,你需要測試和分析。
做額外的查詢總是需要更多的時間。
在數據庫中添加額外的列不會有任何重大影響,即使您應該有成千上萬的行。
錯誤,增加額外的列和保存數據庫交通:)
這取決於您將通過添加列來添加到表中的重定向的數量。 通過適當的索引和設計聯接可以更好地工作,因此無需擔心如果需要進行標準化。
使用第二個表。它會而不是要求您發出兩個查詢。相反,你會發出一個查詢兩個表連接在一起,或更好,創建一個視圖,它的JOIN爲您提供:
SELECT usertable.col1, usertable.col2 superusertable.superuserid
FROM usertable LEFT OUTER JOIN superusertable
ON usertable.userid = superusertable.userid
這可以讓你保持適當的標準化結構,幫助您在某些查詢(例如查明誰是超級用戶),並允許數據庫優化搜索問題。
但是在插入的情況下,我必須檢查兩個表中是否存在該用戶名。 – 2009-11-13 13:25:02
1)這是一個與你原來提出的問題不同的問題,它是關於查詢和2)否,如果用戶不在用戶表中,他們不能在另一個表中有記錄。您可以通過在數據庫設計中聲明適當的關鍵關係來保證這一點。 – 2009-11-13 13:34:43
額外的查詢與額外的列,你是什麼意思?你能澄清嗎? – RageZ 2009-11-13 08:52:10
OP在詢問有關反規範化他的數據庫的情況,將一些冗餘信息添加爲單獨的列,可以通過執行額外的連接或查詢來派生出*。反規範化是提高數據庫查詢性能的常用方法,但是如果用於創建額外列的基礎數據發生更改,則需要額外的工作來保持數據完整性。 – PaulMcG 2009-11-13 09:12:05