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
我在简单 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