Mysql
連接表是一個好習慣嗎?
假設我有一個包含使用者資訊的大表和另一個包含多個位置的表。然後我使用另一個包含 user_id 和 location_id 的表。
為了檢索數據,我必須使用 Left Join 查詢。這不是使整個過程的檢索時間更長,而不是全部放在一張表中嗎?例如,我可以將位置作為文本放在同一張桌子上。
編輯:這是一個例子。
CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(45) DEFAULT NULL, `gender` enum('M','F') DEFAULT NULL ); CREATE TABLE `user_location` ( `user_id` int(11) NOT NULL, `location_id` int(11) NOT NULL ); CREATE TABLE `location` ( `id` int(11) NOT NULL, `location` varchar(45), `parent_id` varchar(45) );
注意:請假設所有相關欄位都在它們之間正確索引。
編輯:我目前有一個大型數據庫,使用者通過上述聯結表檢索他們的位置。我被要求優化數據庫,因為搜尋結果很慢。我已經添加
memcache
並且它顯著改進但現在我只是想知道左連接。例如,目前查詢是這樣的:
SELECT * FROM users LEFT JOIN user_location ON user_location.user_id = user.id LEFT JOIN location ON location.id = user_location.location_id;
這只是為了獲得位置。它們還有幾個其他欄位可以通過聯結檢索,並且它們都是查看使用者配置文件所必需的。我們的電話號碼、地址、密碼、出生日期和許多其他資訊都在不同的表格中。
為了讓我為使用者配置文件創建一個頁面,我必須向伺服器發送一個大查詢。現在在第一次它被記憶體之後,它很好。但我只是想知道為什麼有人會這樣建構他們的數據庫?
如果你把所有東西都放在一張桌子上,你會得到一張更大的、多餘的桌子。
如果所有表都被正確索引,3表解決方案會很快,因為每次查詢都會讀取少量行。
連接表是關係數據庫設計中的標準做法。
如果兩個實體之間存在多對多關係,則表示它們的標準方法是使用三個表。
其中兩個表是實體表,具有主鍵。聯結表位於它們之間(邏輯上)並包含兩個外鍵,一個引用每個實體表。通常,這兩個外鍵將是聯結表中僅有的兩列。