2014-12-31 232 views
3

我想問的是,如果我們定義關係,一對一,一對多等,將會提高性能,而不是我們不建立關係,但要做加入上表去像MySql |關係數據庫vs非關係數據庫的性能

select * from employee inner join user on user.user_id = employee.user_id 

我知道這個問題以前有人問及最答案我有說性能沒有得到受不使用的關係。

但我也聽說創建索引使得查詢更快,所以有可能在不創建關係的情況下爲外鍵在表上創建索引。我對索引有點困惑。

以及如果我們有大型數據庫像100 +表加上很多記錄會怎麼樣關係在數據庫查詢性能方面?

即時通訊使用mysql和php ..

+0

簡而言之:將RDBMS用於彼此相關的數據。 – tyteen4a03

回答

1

外鍵基本上用於數據完整性。

當然,索引提升了性能。

關於有或沒有外鍵的性能,當它說他們提高性能是因爲當你定義一個外鍵你隱式定義一個索引。如果索引表不存在,則會在引用表上自動創建這樣的索引。

+0

所以總之你的意思是創建索引表我必須創建關係,然後再次它意味着關係提升性能? –

+0

不完全是,我的意思是創建索引會提高選擇查詢性能。就這一點而言,當你提高性能時,添加外鍵就是因爲這一點。 – vivoconunxino

+0

所以這意味着,如果我們有一個hudge數據庫和大量的數據進行處理,那麼使用所有表上的關係會更好? –

1

關係用於維護數據庫的參照完整性。它們完全不會影響「選擇」查詢的性能。它們確實降低了「插入」,「更新」和「刪除」查詢的性能,但是您很少需要關係數據庫而沒有參照完整性。

索引是使「select」查詢運行得更快的原因。它們也使插入和更新查詢速度明顯變慢。要詳細瞭解索引如何工作,請轉至use-the-index-luke。這是迄今爲止我發現的關於這個話題的最佳網站。

也就是說,數據庫通常會在聲明主鍵時自動創建索引,並且其中一些(特別是MySql)會在您定義外鍵時自動創建索引。你可以閱讀所有關於他們爲什麼在上述網站上這樣做。