加入比两个查询更快

时间:2011-09-28 11:59:33

标签: sql performance networking

我知道之前已经问过这个问题, example,我同意使用连接的一个查询比为第一个查询返回的每个记录执行另一个查询要快。

但是,由于使用连接,您往往会生成冗余字段,这会使网络变慢吗?

假设我有一家餐桌酒店,HOTEL在餐桌HOTEL_IMAGE中有许多图片。 HOTEL有20个字段。在HOTEL_IMAGE上执行联接将为每个酒店图像生成20个字段。这个查询在网络上的速度会更快吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这取决于很多你的实际数据,但从我所看到的情况来看,如果你有一个带有新统计数据的参数化良好的数据库,那么将连接放在SQL中会更好DB找出要做的事情。

无论如何,数据库查询在我看来是你想要描述的第一件事。任何优秀的DBMS都有很多性能测量工具并非巧合。并且您需要尽可能接近实际数据来分析数据(最近的生产环境副本是最好的)。

答案 2 :(得分: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> )

不确定主表上的查询是否会被缓存,因此第二个选择将重用它,但它肯定会节省流量。

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