我有继承的SQL表:
目标是在我的数据库中登录有关用户的不同类型的历史记录。 history_connection 和 history_email 的“id”列是主键和指向 history 表id的外键。
现在想象一下,在请求中,我不需要访问“子表”列,但我需要知道它是哪种类型的历史记录。我马上考虑LEFT OUTER JOIN:
SELECT h.id,h.date,h.ip,h.user_id,hc.id,he.id
FROM history h
LEFT OUTER JOIN history_connection hc
ON h.id=hc.id
LEFT OUTER JOIN history_email he
ON h.id=he.id
如果hc.id不为null,我可以推断出历史记录的类型:在这种情况下,连接历史记录。问题是我不认为它对性能非常有效,因为如果我在“超类”历史中添加“类型”列,我可以简化这样的查询:
SELECT id,date,ip,user_id,type
FROM history
我的问题是,您是否认为我需要为性能原因添加类型列?
答案 0 :(得分:0)
显然,只查看一个表的查询通常比进行连接的查询更快。但是,如果您的查询如下:
SELECT h.id, h.date, h.ip, h.user_id, hc.id, he.id
FROM history h LEFT JOIN
history_connection hc
ON h.id = hc.id LEFT JOIN
history_email he
ON h.id = he.id;
然后表现应该相当不错,有两个假设:
history_connection(id)
和history_email(id)
)。相比之下,正如您所描述的那样,维护type
列会产生额外的开销。您可以考虑将所有额外的列放在history
中。存储NULL
值的开销很小。