当前位置:Gxlcms > 数据库问题 > SQL分页优化

SQL分页优化

时间:2021-07-01 10:21:17 帮助过:24人阅读

1. 第一种(不可用,与不使用TOP没什么区别)【耗时15~20s】

SELECT * FROM
(
SELECT TOP 20 ROW_NUMBER() OVER(ORDER BY Id) AS Num, * FROM
(
SELECT * FROM Goods_1 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT * FROM Goods_2 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT * FROM Goods_3 WHERE Name Like ‘%测试%%‘ UNION ALL
SELECT * FROM Goods_4 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT * FROM Goods_5 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT * FROM Goods_6 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT * FROM Goods_7 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT * FROM Goods_8 WHERE Name Like ‘%测试%‘
) AS T
) AS T
WHERE Num BETWEEN ((2 - 1) * 10 + 1) AND 2 * 10;

2. 第二种(可用,耗时明显降低很多)【耗时2~4s】

SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY Id) AS Num, * FROM
(
SELECT TOP 20 * FROM Goods_1 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT TOP 20 * FROM Goods_2 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT TOP 20 * FROM Goods_3 WHERE Name Like ‘%测试%%‘ UNION ALL
SELECT TOP 20 * FROM Goods_4 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT TOP 20 * FROM Goods_5 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT TOP 20 * FROM Goods_6 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT TOP 20 * FROM Goods_7 WHERE Name Like ‘%测试%‘ UNION ALL
SELECT TOP 20 * FROM Goods_8 WHERE Name Like ‘%测试%‘
) AS T
) AS T
WHERE Num BETWEEN ((2 - 1) * 10 + 1) AND 2 * 10;

这里的2指的是分页的页码,20指的是分页大小,这样的写法能降低耗时也可想而知了~

SQL分页优化

标签:rom   row   name   使用   写法   分页   union all   sel   over   

人气教程排行