关于UNION做分页查询的问题

使用GO的都是原生SQL大神,特此来问问大家:关于UNION做分页该如何优化?
当表的数据大概多少以内用UNION做分页好点?
下面是我随便在数据库手写的一点例子,帮优化下
不会存储过程,不考虑存储过程

SELECT title,
       img_url,
       img_border,
       url,
       ext,
       product_id,
       product_type,
       up_time,
       min_price,
       max_price
FROM (
        (SELECT title,
                re_group_content.img_url,
                img_border,
                url,
                re_group_content.ext,
                product_id,
                product_type,
                now() AS up_time,
                0 AS min_price,
                0 AS max_price
         FROM re_group_content
         LEFT JOIN re_product ON re_group_content.product_id = re_product.id
         AND re_group_content.product_type = 'common_product'
         LEFT JOIN re_blind_box ON re_group_content.product_id = re_blind_box.id
         AND re_group_content.product_type = 'blind_box'
         WHERE re_group_content.status = 1
           AND group_id = 12
           AND ((re_product.status = 1
                 AND re_product.up_time <= now())
                OR re_blind_box.status = 1) )
      UNION
        (SELECT '' AS title,
                img_url,
                '' AS img_border,
                '' AS url,
                '' AS ext,
                j.id AS product_id,
                'common_product' AS product_type,
                j.up_time,
                IFNULL(min(sale_price), 0) AS min_price,
                IFNULL(min(prime_price), 0) AS max_price
         FROM re_product j
         LEFT JOIN re_product_package k ON j.id = k.product_id
         AND k.package_type != 'url'
         WHERE j.status = 1
           AND up_time <= now()
         GROUP BY j.id)
      UNION
        (SELECT '' AS title,
                img_url,
                '' AS img_border,
                '' AS url,
                '' AS ext,
                id AS product_id,
                'blind_box' AS product_type,
                created_at AS up_time,
                sale_price AS min_price,
                sale_price AS max_price
         FROM re_blind_box
         WHERE status = 1
           AND sale_price != 0 )) m
ORDER BY up_time DESC
LIMIT 0, 10
讨论数量: 2

SQL 不要这么写, 不要所有的东西都用 SQL 语句实现, 要学会将 SQL 简化(拆 SQL). 要在你的程序代码里为 SQL 服务器减压.

3年前 评论

@ouer1994 是的,你说的很对, 在项目里面不能这样写。BUT,平时多写写原生SQL对SQL提升还是很大的。

3年前 评论
shubiao-yao 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!