我需要检查特定用户是否已经引用了我们的一个事务表(我们有大约10个事务表)。我建议使用包含已经引用的所有用户的VIEW,然后DEV团队可以通过该表进行SELECT,以查明他们正在寻找的数据是否存在,
所以这是我对视图的查询:
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, 隆美尔
答案 0 :(得分: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
但是由于你必须使用一个视图,我不知道如何以不同的方式使用它。
答案 1 :(得分: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
时都有一个