好的,前提。三個表,爲這項工作很簡單:sql性能 - 從多個表中提取時的查詢設計
table first:
id, name
table second:
id, firstId, secondName
table third
id, thirdName, secondId
我想在第三的是在第二個有一個關係到了一定的「第一」行ID一個ForeignKey到行所有行。
典型的SQL:
select t.id, s.id as secondId, t.thirdName, s.secondName from third t
inner join second s on t.secondId=s.id where s.firstId = X
因此,這裏是我的問題:
難道是更快的性能明智的,有在第三列,而不是直接的外鍵先?
即
table third:
id, secondId, firstId, name
所以,我反而可能使查詢:
select t.id, s.id as secondId, t.thirdName, s.secondName from third t
inner join second s on t.secondId=s.id where t.firstId = X
有沒有少加入,因爲我需要從「第二」的數據太多,但我會做的從第三位而不是第二位查找「firstId」。
只是好奇,如果任何人有任何輸入:)
不,我不認爲這將是多大的差別,如果有的話。甚至可能會更慢。如果你要將'table3'加入'table1',跳過join到'table2',是的。 (向table3添加'firstId'將意味着設計更改,更改表2和3的主鍵和外鍵。) – 2012-03-08 11:49:23
感謝您的回覆。那麼,前提是我需要來自table2的數據。關於設計變更,是的,從領域理論的角度來看,但是我只是從性能的角度來介紹「第三」中的「firstid」列,即重複信息。哦,我會保持它,因爲它是我猜:) – Mathias 2012-03-08 14:02:10
這當然是一個替代考慮。表2:在'(id,firstid)'和表3:添加'firstid'並將FK改爲'FOREIGN KEY(secondid,firstid)REFERENCES table2(id,firstid)''上添加'UNIQUE'約束。化合物PK和FK使得連接在許多場合更容易。問題是某些DBMS無法處理組合鍵中的auto_increasing序列,許多ORM根本無法處理組合PK和FK。 – 2012-03-08 15:01:51