【发布时间】:2014-09-11 15:12:25
【问题描述】:
您好,我想知道在左连接中添加附加条件是否会提高性能。 示例代码如下。 我只需要知道某些优惠的价格数据,但需要所有优惠数据。 只是想知道是否值得添加额外的连接条件来提高性能?
SELECT
*
FROM
OFFERS
LEFT JOIN PRICE ON (
PRICE.PH_SUBS_LINK_SK = ACTSUBS.PH_SUBS_LINK_SK and
PRICE.PRICE_END_DT= '09-09-9999' and
OFFERS.PERCENT_VALUE >0 and
OFFERS.VALUE_OR_PERCENT = 'PERCENT' and
OFFERS.PRODUCT_OFFER_TYPE = 'RC' and
OFFERS.OFFER_STATUS_CODE in ('ACT','PTM')
)
【问题讨论】:
-
这些不是连接条件,而是过滤器。过滤数据通常会提供更好的性能,但它取决于索引、分区等。
-
这将取决于数据集大小索引和其他各种因素,不仅仅是
JOIN与WHERE的使用会影响性能。首先IN('ACT','PTM')通常效率很低,而且通常比(columnName = '' OR columnName = '')更快。您还可以从dba.stackexchange.com 获得更多帮助,尽管我相信您的问题在这里也适用,但他们可能对优化有更深入的了解:) -
另外,这取决于您使用的是哪个 RDBMS。您是否比较了执行计划?
-
您还引用了 ACTSUBS 表,但在您的 from 或 left-join 中没有列出这样的表。那应该给你一个失败的命令来执行。
标签: sql performance join multiple-conditions