我有一個MySQL數據庫與4個表:應關係表包含重複的數據,以加快查詢速度
job
job_application
client
candidate
每個表都有它自己的主鍵,即job_id
,job_application_id
,client_id
,candidate_id
僱主在client
表中可以在job
表中發佈作業。該job
表包含一個client_id
字段,識別客戶端在candidate
表
考生可以申請工作,到job_application
表中插入一行。該job_application
表包含job_id
場和candidate_id
場以確定哪些工作是和誰申請就
我已經在運行了一下寫了查詢的問題的用人單位來管理他們收到的求職申請。此處作爲一例是一個功能我寫的,從job_application
public function deleteJobApplications($job_application_ids) {
$this->db->query("DELETE ja.* FROM " . DB_PREFIX . "job_application ja LEFT JOIN " . DB_PREFIX . "job j ON (j.job_id = ja.job_id) WHERE ja.job_application_id IN ('" . implode("','", array_map('intval', $job_application_ids)) . "') AND j.client_id = '" . (int)$this->client->getClientId() . "'");
}
刪除行因爲client_id
在job
表只是引用,我需要LEFT JOIN
的job
表我想UPDATE
或DELETE
從job_application
每次表
我應該另一client_id
字段添加到job_application
表,基本上是複製在數據庫中已經保存的數據,或者繼續LEFT JOIN
爲每UPDATE
和DELETE
?
爲了速度和複雜度最小化而擁有冗餘數據並非與數據庫無關關鍵是平衡 – amar
我會說重複外鍵是提高數據庫性能的適當做法,您必須確保保留表是一致的。嘗試一些性能測試(大量的數據集),看看它是否對你有很大幫助 – x4rf41
我認爲你應該檢查indexex,做一些「解釋」,我在+100m行的表上留下了連接,少於一毫秒平均值爲〜4ms),在一個體面的服務器上,而不是高科技。我不認爲你有那麼多行,左連接應該工作得很好。 –