只是与工作中的一些人讨论编写查询和性能的最佳方式。
限制您的第一个结果集是否更好,以便初始表中的所有连接都有更少的行来连接?
例如:
表:REFCODE 有 ~10,000 行
表:WHSE 有 ~200 行
哪个性能更好?
使用内部连接将行从大型结果集中挤出:
SELECT
*
FROM
REFCODE
INNER JOIN
WHSE ON
WHSE.RCIDX = REFCODE.RCIDX
首先使用较小的结果集:
SELECT
*
FROM
WHSE
INNER JOIN
REFCODE ON
REFCODE.RCIDX = WHSE.RCIDX
使用最大的结果集,但使用 where 子句过滤器仅记录我知道将加入第二个表的记录
SELECT
*
FROM
REFCODE
INNER JOIN
WHSE ON
WHSE.RCIDX = REFCODE.RCIDX
WHERE
REFCODE.TYPE = 'WHSE'
还是 CBO 会确定类似的解释计划?工作中的人告诉我,您应该始终从尽可能小的结果集开始,但不确定!
任何讨论都值得讨论!