You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用子查询创建GI?基于指定SQL语句的需求咨询

基于子查询实现目标数据筛选及索引创建

原SQL功能说明

你给出的SQL语句用于关联Mtable和OTable,提取每个OrderId对应的OTable中OpId最小的关联记录。核心是通过相关子查询获取每个订单的最小操作ID,再匹配主表数据:

Select * from Mtable M, OTable O where M.OrderId=O.OrderId and O.OpId in (Select Min(OpId) from OTable OA where OA.OrderId=O.OrderId)

优化后的子查询写法

如果想让逻辑更清晰,可通过子查询预计算每个OrderId的最小OpId,再通过JOIN关联,避免相关子查询的重复计算:

SELECT M.*, O.*
FROM Mtable M
INNER JOIN OTable O 
    ON M.OrderId = O.OrderId
INNER JOIN (
    -- 子查询预计算每个OrderId的最小OpId
    SELECT OrderId, MIN(OpId) AS min_op_id
    FROM OTable
    GROUP BY OrderId
) OA 
    ON O.OrderId = OA.OrderId 
    AND O.OpId = OA.min_op_id

创建适配查询的索引(GI)

如果这里的GI指用于提升查询性能的全局索引,可给OTable创建复合索引,覆盖子查询和关联所需字段:

CREATE INDEX idx_otable_order_opid ON OTable(OrderId, OpId);

该索引能让数据库快速分组计算最小OpId,同时加速主查询中OrderId与OpId的匹配过程。

内容的提问来源于stack exchange,提问作者user2803805

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:05:17