2011-09-28 75 views
3

我知道这个问题之前已被问到, example,我确实同意一个连接查询比对第一个查询返回的每个记录执行另一个查询更快。是一个加入比两个查询更快

但是,由于加入你往往会产生冗余字段,这会减慢网络?

比方说,我有一张桌子酒店,HOTEL有一张桌子HOTEL_IMAGE中的许多图片。 HOTEL有20个领域。在HOTEL_IMAGE上进行加入会为每个酒店图像生成20个字段。这个查询在网络上仍然会更快吗?

+6

警察出 - 它取决于:)。你的意思是内部或外部连接(外部效率低得多)?你使用的是什么RDBMS?你在加入远程桌面吗?一般来说,连接速度会更快,但有很多例外。最好的办法是查看你的情况下每个查询计划。 –

+1

@David - 虽然正确的答案! –

+0

INNER JOIN和MYSQL虽然我通常使用MS SQL Server – Jonny

回答

1

这取决于很多您的实际数据,但是从我所看到的,如果你有新的统计数据的良好参数DB,它是更好的把SQL中的加入,让DB弄不清该怎么办。

无论如何,在我看来,数据库查询是您想要分析的第一件事。任何好的DBMS都有很多性能测量工具并不是巧合。而且您需要使用尽可能接近实际数据的数据进行配置文件(生产环境的最新副本最好)。

0

请勿使用select *,而只使用您需要的列。如果你这样做,加入会更快(不知道为什么你会想要这样做2查询,你必须做2连接到您的数据库等)。

+3

这个问题没有提到'*' –

+0

我只是一个例子。很难用写作来解释整篇文章 – Jonny

+1

@Martin Smith:“*会产生20个字段*”听起来很像'SELECT *'正在使用。 –

0

作为一种解决方案,以避免重复联接的数据,如果您的数据库支持,您可以从单个查询返回多个记录集。一个记录集将返回主记录,第二个 - 详细记录加上主查询中的关键字段。

select ID, Name, ... from HOTEL where <.... your criteria>; 

select h.ID as HotelID, i.ID, i.Description, i.ImageFile, .... from HOTEL_IMAGE i 
join HOTEL h on h.ID = i.HotelID and (<.... same criteria for HOTEL>) 

不知道如果在主表的查询会被缓存,所以第二个选择将重新使用它,但它会节省流量肯定。

我们使用这种方法进行查询,这往往会返回多级联接结果。

相关问题