将三个或更多表连接在一起是个好主意,如下例所示。我正在努力专注于表现。有没有办法重新编写这个更高效,更快速执行的查询?我试图让尽可能简单化。
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'
答案 0 :(得分:4)
如果您想要更快的性能,请确保索引(群集或非群集)涵盖所有连接。通过在每个表的id和相应的属性列上创建索引,看起来这可以在上面的查询中完成
答案 1 :(得分:4)
如果您只选择了列的一个子集,那么当您从所有3个表中选择所有内容时,您可以加快速度。
答案 2 :(得分:2)
假设一个规范化的数据库,就结构化查询和连接而言,这是你能做的最好的。
还有其他选项可供查看,包括在不同的join和select子句列上添加索引,对表结构进行非规范化以及缩小结果集。
在连接列上添加索引(它们似乎是主键,因此可能已被索引)将有助于连接性能,索引select子句中的列将有助于加快每个表上的过滤。
如果你进行非规范化,你会得到一个具有重复数据的结构,其中包含重复数据的所有含义(主要是数据维护问题),但是你不再需要加入就可以获得性能。
选择列时,您应指定所需的列 - 使用*
通常是个坏主意。这样您只需传输应用程序真正需要的数据。
答案 3 :(得分:2)
性能方面,我认为这实际上取决于每个表中的记录数,并确保定义了正确的索引。 (我还假设SELECT *
是占位符;你应该避免使用通配符)
我首先查看您的执行计划,然后开始优化。如果您的性能仍然不理想,可以尝试使用临时表将4个表连接拆分为单独的较小连接。