我正在连接FDA的MedWatch系统中的三个表,这些表有一个共同的个人安全报告或ISR字段。这三个表格是人口统计数据(唯一记录),药物(独特记录,但与人口统计记录相关联)和反应(一个或多个记录,每个记录都链接到药物或人口统计记录)。
我的问题是,由于Reactions.ISR可以内联到药物或人口统计表,是否有首选方式?
E.g。可以是:
SELECT Demographics.Case, Demographics.ISR, Drugs.DrugName, Reactions.PT
FROM (Reactions INNER JOIN Drugs ON Reactions.ISR = Drugs.ISR)
INNER JOIN Demographics ON Drugs.ISR = Demographics.ISR
链接在人口统计数据< - Drugs< - Reactions hierarchy
中或:
SELECT Demographics.Case, Demographics.ISR, Drugs.DrugName, Reactions.PT
FROM Reactions INNER JOIN (Drugs INNER JOIN Demographics ON Drugs.ISR = Demographics.ISR)
ON Reactions.ISR = Demographics.ISR
将药物记录和反应记录独立链接到人口统计记录。
两者都返回相同的记录集,但我想知道一种方法是否优先于另一种方法作为最佳实践,可能使查询执行得更快。即是否可以通过改变JOIN序列来提高查询性能?
答案 0 :(得分:0)
要比较两个查询的性能,您应该查看其执行计划。例如,在这种情况下,您可能会发现您获得相同的计划,在这种情况下证明它无关紧要。
答案 1 :(得分:0)
如何优化查询取决于数据库。
就内部联接(以及where子句)而言,通常最好首先从限制性最强的表(或条件)开始,然后链接到“更宽”的联接/条件。
鉴于这些连接不是那么严格 - 即没有任何其他条件应用,那么它们可能是等价的 - 查看两种方法的查询计划。