我在我的數據庫中有一個invitations
表,它有from
和to
列,它們都是我的users
表中的userId
列的外鍵。值得在列上添加索引只是爲了讓它們成爲外鍵?
例如,如果用戶#1邀請用戶#2做一些事情,然後在invitations
表,from
將是1,而to
將2
我將使用to
列中陳述,如:
SELECT * FROM invitations WHERE `to` = $currentUserId
但是,from
柱將永遠不會在WHERE語句中使用。
從我讀過的內容來看,你只應該在WHERE語句中使用的列上添加一個索引,但是我也讀過你應該總是創建外鍵。
爲了增加一個外鍵,在from
上創建索引是否合理?
如果我將外鍵的更新操作設置爲'NO ACTION',那麼是否可以更快地對錶進行插入/更新? – 2011-05-21 16:17:24
否。系統在刪除被引用的表(用戶)之後仍然必須驗證是否存在約束違規,並且仍然必須執行SELECT * FROM引用表(邀請),其中foreignkey = deletedFKvalue來實現該目的。您仍然需要索引來避免在引用表(用戶)更新/刪除時在引用表上發生全表掃描(邀請)。 – 2011-05-21 22:18:03