我想討論一下這個簡單的postgres查詢,並弄清楚我是否有一些postgres和DBs背後的理論。這裏說到:是否必須使用外鍵來建立連接查詢比例?
-- Query 1
SELECT posts.*, users.*
FROM posts INNER JOIN users
ON posts.user_id = users.id
WHERE
posts.user_id = :id
ORDER BY posts.creation_time
這顯然涉及到兩個表(users
和posts
)接合在一起。有一個索引(posts.creation_time
,posts.user_id
)加快搜索。
我的理解是,我還需要一個外鍵關聯posts.user_id
到users.id
不僅要執行的借鑑誠信爲這樣的一種形式,但奧斯陸,而且可能更重要的是,要加快ON posts.user_id = users.id
位查詢。
我說得對嗎?
現在求索這個版本的查詢:
-- Query 2
SELECT posts.*, users.*
FROM posts INNER JOIN users
ON posts.user_id = users.id
WHERE
users.id = :id
ORDER BY posts.creation_time
假設上述的外鍵(posts.creation_time
,posts.user_id
)存在,將這項查詢的規模,考慮到方程中的變量對對方的生活的加入?
我的猜測是,它不能擴展
感謝
檢查執行計劃,你會知道(但總的來說:索引加速查詢,外鍵不會影響性能 - 隻影響數據的正確性) –
FK用於維護參照完整性。 FK也會對性能產生影響。只要考慮額外的刪除檢查,例如必須進行的檢查,以保持參照完整性。 – ivicaa
好的,但一般情況下,拋開參考文獻的完整性:你是否需要索引參與連接的字段以加快匹配?如果是這樣,它是否應該與查詢中涉及的其他字段(posts.user_id,posts.creation_time)一起作爲多列索引的一部分,還是應該是獨立索引? – nourdine