2

我需要检查一个特定用户是否已经被引用到我们的一个事务表(我们大约有 10 个事务表)。我建议使用包含所有已引用用户的视图,然后开发团队可以通过该表进行选择,以找出他们正在寻找的数据是否存在,

所以这是我对视图的查询:

SELECT DISTINCT user_ID
FROM transaction_table_1

UNION

SELECT DISTINCT user_ID
FROM transaction_table_2

UNION

SELECT DISTINCT user_ID
FROM transaction_table_3

UNION

SELECT DISTINCT user_ID
FROM transaction_table_4

[...]

现在它有效,但我的问题是,这是个好主意吗?该要求要求我只提供一个脚本(或视图)而不是存储过程,我认为使用 SP 会更好,因为我可以为每个表执行一个快速的 IF EXIST() 语句并检查是否参数 user 存在于任何表中,但他们真的希望它只是一个他们可以检查的脚本(并且不使用变量)。

你们能不能给我一个更好的方法来满足这个要求,这对性能的影响会更小,因为这可能不是这个要求的优化解决方案。

TIA,隆美尔

4

2 回答 2

2

好吧,你可以删除DISTINCT因为UNION已经成功了:)

SELECT user_ID
FROM transaction_table_1

UNION

SELECT user_ID
FROM transaction_table_2

UNION

SELECT user_ID
FROM transaction_table_3

UNION

SELECT user_ID
FROM transaction_table_4

但是由于您必须使用视图,所以我不知道如何使其有所不同。

于 2012-05-17T11:00:11.773 回答
1

从性能的角度来看,我会稍微不同地构建查询:

SELECT DISTINCT user_ID
FROM (

    SELECT user_ID
    FROM transaction_table_1

    UNION ALL

    SELECT user_ID
    FROM transaction_table_2

    UNION ALL

    SELECT user_ID
    FROM transaction_table_3

    ...
) x

这会将需要执行的唯一索引扫描的数量减少到 1 - 而不是每次UNION执行a 时都有一个

于 2012-05-17T11:10:44.593 回答