我是最近的大學畢業生,也是軟件開發的新僱員。事情最近有點慢,所以我得到了一個數據庫任務。我的db技能僅限於使用Rails和Django的寵物項目。所以,我對我最近的任務感到有點驚訝。SQL效率參數,添加一列或通過查詢解決?
我的經理已要求我爲Person創建一個'Parent'表,並在Person表中添加對其管理員的引用。當託管人(不是父母)是FormContact時,這是爲了方便從父母到母親。
這是我正在使用的sql-db的簡化模擬結構。如果我有權訪問Visio,我會繪製關係表。
我們有一張桌子'人',我們有一個'表'的表。有一個表格'FormContact',它將一個人與一個表格聯繫起來,並不是所有的人都與一個表格有關。有人際關係關係表(僱主,家長等)
我問過,「爲什麼不能通過查詢處理?」迴應,效率低下。 (真的!?!)
所以,我問,「爲什麼不引用表單?這樣會更有效率,因爲您不會使用child/custodian引用查詢FormContacts表。迴應,這基本上會使Parent成爲FormContact。 (足夠公平)
我繼續寫了一個查詢,從非FormContact Parent獲取到Form,並在生產服務器上進行了測試。響應時間是即時的。 SOME_VALUE是Parent的fk ID。
SELECT FormID
FROM FormContact
WHERE FormContact.ContactID
IN (SELECT SourceContactID
FROM ContactRelationship
WHERE (ContactRelationship.RelatedContactID = *SOME_VALUE*)
AND (ContactRelationship.Relationship = 'Parent'));
如果我是正確的, 「這是一個不必要的變化。」我應該怎麼做,捍衛我的立場,還是應該向經理人提出要求?
如果我錯了。我的錯誤是什麼?有沒有比經理更好的解決方案?
你到底在問什麼?您反對系統的哪一方面? – 2010-03-29 14:07:20
我不明白SQL查詢如何低效。尤其像這樣簡單。另外,我沒有看到如何創建子類和列,這會導致另一個SQL查詢更高效。兩個查詢之間的唯一區別是一個使用子查詢,另一個使用fk ID。 – sanscore 2010-03-29 14:13:49
您的查詢適用於給定的SOME_VALUE,請編寫一個查詢以處理來自FormContact的所有行,就像報表一樣。 – 2010-03-29 14:14:26