【问题标题】:Performance about query result of union联合查询结果的性能
【发布时间】:2026-01-21 00:25:01
【问题描述】:

我有两个存储用户数据的表,一个用于内部用户,另一个用于外部用户。两个用户都会买书,所以我有下面的sql脚本

select o.orderid, o.orderdate, u.firstname, u.lastname from OrderTable o inner join 
(
  select inneruser_id as uid, firstname, lastname from innerUser where len(firstname) > 0 or len(lastname) > 0
  union
  select external_id as uid, firstname, lastname from externalUser where len(firstname) > 0 or len(lastname) > 0
) u on u.uid = o.userId where o.orderdate > {0}

对于innerUser表,innneruser_id是主键,而external_id不是externalUser表的主键,我想知道union的结果是否还在u.uid上有索引,因为内部用户超过20万左右100,000 名外部用户。

我是否需要为 external_id 添加索引,这会提高查询的性能吗? 感谢您的帮助。

【问题讨论】:

    标签: sql performance optimization query-optimization union


    【解决方案1】:

    在管理工作室中运行您的查询,并打开“包括实际执行计划”选项。

    并按照它的建议来提高性能。

    【讨论】:

    • 这非常非常有帮助,我只是使用推荐的“缺失索引”来大幅提高查询性能。谢谢
    【解决方案2】:

    可能会,但看起来像向u.uido.userIdo.orderdate 添加索引更有可能提高性能,因为它们涉及连接和过滤。

    【讨论】: