哪个查询会更好查询?

时间:2013-11-01 19:44:57

标签: sql db2

我在两个以上的表上应用连接,下面是where子句的一部分。 以下两个是更好的写作方式,为什么??

where
    d.bu_id     =   'ABC'
and
    hd.bu_id    =   'ABC'
and 
    s.bu_id     =   'ABC'

OR

where
    d.bu_id     =   'ABC'
and
    hd.bu_id    =   d.bu_id
and 
    s.bu_id     =   d.bu_id

2 个答案:

答案 0 :(得分:2)

最佳解决方案实际上取决于您预期的变更模式。如果所有三个都是相同的,因为它们确实引用了同一个实体,那么它们似乎更有可能一起变化。在这种情况下,您希望选择第二种选择,以免重复自己。

如果它们碰巧具有相同的价值,那么它们中的一个将来会更加独立地发生变化,因此您可以通过将其保留为第一种形式来节省自己的麻烦。

如果您对性能感到疑惑,那么就没有什么区别,因为任何查询优化器都应该能够将它们都计算出来。

答案 1 :(得分:1)

我认为最好的解决方案是声明一个变量来保存您要查找的bu_id,然后join hdsdbu_id上一起。如果有必要,您可以在一个位置更改bu_id。在bu_id字段上添加索引应确保良好的性能。

DECLARE @bu_id CHAR(3) = 'ABC'

SELECT
    *
FROM
    table_d d
    INNER JOIN table_hd hd on hd.bu_id = d.bu_id
    INNER JOIN table_s s on s.bu_id = d.bu_id
WHERE
    d.bu_id = @bu_id