是否可以选择加入3个或更多表?

时间:2012-03-27 19:29:23

标签: sql database select

将三个或更多表连接在一起是个好主意,如下例所示。我正在努力专注于表现。有没有办法重新编写这个更高效,更快速执行的查询?我试图让尽可能简单化。

select * from a
join b on a.id = b.id 
join c on a.id = c.id
join d on c.id = d.id
where a.property1 = 50 
    and b.property2 = 4 
    and c.property3 = 9 
    and d.property4 = 'square'

4 个答案:

答案 0 :(得分:4)

如果您想要更快的性能,请确保索引(群集或非群集)涵盖所有连接。通过在每个表的id和相应的属性列上创建索引,看起来这可以在上面的查询中完成

答案 1 :(得分:4)

如果您只选择了列的一个子集,那么当您从所有3个表中选择所有内容时,您可以加快速度。

答案 2 :(得分:2)

假设一个规范化的数据库,就结构化查询和连接而言,这是你能做的最好的。

还有其他选项可供查看,包括在不同的join和select子句列上添加索引,对表结构进行非规范化以及缩小结果集。

在连接列上添加索引(它们似乎是主键,因此可能已被索引)将有助于连接性能,索引select子句中的列将有助于加快每个表上的过滤。

如果你进行非规范化,你会得到一个具有重复数据的结构,其中包含重复数据的所有含义(主要是数据维护问题),但是你不再需要加入就可以获得性能。

选择列时,您应指定所需的列 - 使用*通常是个坏主意。这样您只需传输应用程序真正需要的数据。

答案 3 :(得分:2)

性能方面,我认为这实际上取决于每个表中的记录数,并确保定义了正确的索引。 (我还假设SELECT *是占位符;你应该避免使用通配符)

我首先查看您的执行计划,然后开始优化。如果您的性能仍然不理想,可以尝试使用临时表将4个表连接拆分为单独的较小连接。