各种常见数据库分页实现(转)

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 因为数据量过大,如果一次性查询会耗用大量时间以及性能,因此对数据进行分页显示变得尤为重要,以下就列出一些常用数据库的sql分页实现。 1.MySQL实现分页 MySQL实现分页效果比较简单,只有一个limit关键字就可以解决。

 

因为数据量过大,如果一次性查询会耗用大量时间以及性能,因此对数据进行分页显示变得尤为重要,以下就列出一些常用数据库的sql分页实现。 

1.MySQL实现分页 
MySQL实现分页效果比较简单,只有一个limit关键字就可以解决。 

示例:SELECT username,password FROM tb_user WHERE id = 1 LIMIT 100,10; 
具体:select * from tableName where 条件 limit 当前页码*页面容量-1,页面容量 

2.Oralce实现分页 

SELECT * 
  FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM tableName order by id) A WHERE ROWNUM <=20) 
WHERE RN >= 11; 

select count(*) from tableName where 条件 


3.Sqlserver实现分页 

sqlserver由于版本的不同,分页的实现方式也各不相同。 

SQL 2000 用临时表解决,通过在临时表中增加自增列解决RowNumber。 
DECLARE @Start INT 
DECLARE @End INT 
SELECT @Start = 14000,@End = 14050 

CREATE TABLE #employees (RowNumber INT IDENTITY(1,1), 
LastName VARCHAR(100),FirstName VARCHAR(100), 
EmailAddress VARCHAR(100)) 

INSERT INTO #employees (LastName, FirstName, EmailAddress) 
SELECT LastName, FirstName, EmailAddress 
FROM Employee 
ORDER BY LastName, FirstName, EmailAddress 
SELECT LastName, FirstName, EmailAddress 
FROM #employees 
WHERE RowNumber > @Start AND RowNumber <= @End 

DROP TABLE #employees 

GO   

SQL 2005/2008 由于支持了Row_Number于是通过派生表的方式解决(两个嵌套) 
DECLARE @Start INT 
DECLARE @End INT 
SELECT @Start = 14000,@End = 14050 

SELECT LastName, FirstName, EmailAddress 
FROM (SELECT LastName, FirstName, EmailAddress, 
ROW_NUMBER() OVER (ORDER BY LastName, FirstName, EmailAddress) AS RowNumber 
FROM Employee) EmployeePage 
WHERE RowNumber > @Start AND RowNumber <= @End 
ORDER BY LastName, FirstName, EmailAddress 
GO 
   

SQL 2005/2008 或者用CTE的方式实现,和派生表一样,就是好看点,执行计划都一样。 
DECLARE @Start INT 
DECLARE @End INT 
SELECT @Start = 14000,@End = 14050; 
WITH EmployeePage AS 
(SELECT LastName, FirstName, EmailAddress, 
ROW_NUMBER() OVER (ORDER BY LastName, FirstName, EmailAddress) AS RowNumber 
FROM Employee) 
SELECT LastName, FirstName, EmailAddress 
FROM EmployeePage 
WHERE RowNumber > @Start AND RowNumber <= @End 
ORDER BY LastName, FirstName, EmailAddress 
GO 
   
SQL SERVER 2012 比较给力支持了OFFSET,于是一个Select结束战斗,另外在2012里,如果前面加上TOP(50),那么执行计划就会少读很多行数据(读的精准了),提高性能。 
SELECT top(50) LastName, FirstName, EmailAddress 
FROM Employee 
ORDER BY LastName, FirstName, EmailAddress 
OFFSET 14000 ROWS 
FETCH NEXT 50 ROWS ONLY; 

4.DB2实现分页 
Db2实现分页与SQL Server类似, 但是可以不对资料排序(起始位置从1开始) 

对资料排序 
select * from ( 
    select t.*, ROW_NUMBER() OVER(ORDER BY CARD_ID asc) AS ROWNUM from CARD t ) a 
where ROWNUM > 20 and ROWNUM <=30 

不对资料排序 
select * from ( 
    select t.*, ROW_NUMBER() OVER() AS ROWNUM from CARD t ) a 
where ROWNUM > 20 and ROWNUM <=30 


以上为各种常见数据库分页语句,留存备用。

http://lafecat.iteye.com/blog/2186265

 

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
【Redis】利用Redis List实现数据库分页快速查询
【Redis】利用Redis List实现数据库分页快速查询
451 0
利用Redis List实现数据库分页快速查询的有效方法
利用Redis List实现数据库分页快速查询的有效方法
mysql数据库查询时用到的分页方法有哪些
【8月更文挑战第16天】在MySQL中,实现分页的主要方法包括:1)使用`LIMIT`子句,简单直接但随页数增加性能下降;2)通过子查询优化`LIMIT`分页,提高大页码时的查询效率;3)利用存储过程封装分页逻辑,便于复用但需额外维护;4)借助MySQL变量实现,可能提供更好的性能但实现较复杂。这些方法各有优缺点,可根据实际需求选择适用方案。
666 2
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
常用数据库的分页语句(mySQL、oracle、PostgreSQL、SQL Server)
常用数据库的分页语句(mySQL、oracle、PostgreSQL、SQL Server)
|
10月前
|
【Redis】利用 Redis List 实现 Java 数据库分页快速查询
在大型应用中,数据库分页查询是日常开发中不可避免的需求之一。随着数据量的不断增加,传统的数据库分页方式可能会变得效率较低。为了解决这一问题,本文将介绍如何使用 Redis List 数据结构,结合 Java 编程语言,实现高效的数据库分页查询。
281 9
数据库基础入门 — SQL排序与分页
数据库基础入门 — SQL排序与分页
72 0
数据库基础入门 — SQL排序与分页
数据库基础入门 — SQL排序与分页
100 0
数据库深分页介绍及优化方案
在前端页面显示,为了避免一次性展示全量数据,通过上下翻页或指定页码的方式查看部分数据,就像翻书一样,这就利用了 MySQL 的分页查询。
392 0
MySQL数据库中的排序与分页的操作详解
MySQL数据库中的排序与分页的操作详解
110 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等