SQL 对于简单的数据库结构,接下来的分页获取非常慢

SQL pagination fetch next very slow for simple database structure

我在简单 SQL 查询的分页方面遇到了问题。我定义了以下数据库表。

ord_commission - 大约 300 万行

ord_order - 大约 20 万行

运行 以下简单的 SQL 查询对我来说需要大约 8 秒到 运行。但是,通过删除最后一部分“偏移量 0 行仅获取接下来的 50 行”,查询立即 运行s。

对于此类查询,如何通过某些性能实现分页?

这里是否缺少任何索引,或者可以做什么?

SELECT 
    oc.commission_no
FROM
    dbo.ord_commission AS oc 
JOIN
    ord_order AS oo ON oo.order_id =oc.order_id
WHERE
    oc.commission_no = '1' OR oo.order_no = '1'
ORDER BY
    oc.commission_no DESC
    OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY

我还附上了此查询的执行计划:

解决方案是使用 'UNION ALL' 而不是 'or'。

SELECT 
    oc.commission_no
FROM
    dbo.ord_commission AS oc 
JOIN
    ord_order AS oo ON oo.order_id =oc.order_id
WHERE
    oc.commission_no = '1'
    
UNION ALL

SELECT 
    oc.commission_no
FROM
    dbo.ord_commission AS oc 
JOIN
    ord_order AS oo ON oo.order_id =oc.order_id
WHERE
    oo.order_no = '1'



ORDER BY
    oc.commission_no DESC
    OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY