关于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
SQL 不要这么写, 不要所有的东西都用 SQL 语句实现, 要学会将 SQL 简化(拆 SQL). 要在你的程序代码里为 SQL 服务器减压.
@ouer1994 是的,你说的很对, 在项目里面不能这样写。BUT,平时多写写原生SQL对SQL提升还是很大的。