MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

国际化使用UTF-8造成数据库MSSQL Server 2000/2005存储乱码的分析  看了许多网上使用MSSQL Server 2000/2005使用UTF-8造成数据库存储乱码的描述,也说一下自己做的一个国际化项目的经验。 这个项目描述: 架构:VC++的ATL Server进行开发; 页面:web页面是UTF-8编码,CodePage=65001; 应用服务器程序:编译好的dll是Unicode编码; 操作系统:中文Windows 2003 Server; 数据库联接方式 阅读详情

一、       MySQL 数据库 分页查询
MySQL数据库实现分页比较简单,提供了 LIMIT函数。一般只需要直接写到sql语句后面就行了。
LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数。例如:
select * from table WHERE … LIMIT 10; #返回前10行
select * from table WHERE … LIMIT 0,10; #返回前10行
select * from table WHERE … LIMIT 10,20; #返回第10-20行数据

二、       SQLServer数 据库分页查询
SQLServer数据库又分为 SQLServer2000和SQLServer2005。一般比较简单的方法是通过TOP函数来实现。如下:
SELECT TOP 10 * FROM sql WHERE (
code NOT IN  (SELECT TOP 20 code  FROM TestTable  ORDER BY id))
ORDER BY ID
这条语句,从理论上讲,整条语句的执行时间应该比子句的执行时 间长,但事实相反。因为,子句执行后返回的是20条记录,而整条语句仅返回10条语句,所以影响数据库响应时间最大的因素是物理I/O操作。而限制物理I /O操作此处的最有效方法之一就是使用TOP关键词了。TOP关键词是SQL SERVER中经过系统优化过的一个用来提取前几条或前几个百分比数据的词。
以上语句的有一个致命的缺点,就是它含有NOT IN字样,要换成用not exists来代替not in,二者的执行效率实际上是没有区别的。
在以上分页算法中,影响我们查 询速度的关键因素有两点:TOP和NOT IN。TOP可以提高我们的查询速度,而NOT IN会减慢我们的查询速度,所以要提高我们整个分页算法的速度,就要彻底改造NOT IN,同其他方法来替代它。
我们知道,几乎任何字段,我们都可以通过max(字段)或min(字段)来提取某个字段中的最大 或最小值,所以如果这个字段不重复,那么就可以利用这些不重复的字段的max或min作为分水岭,使其成为分页算法中分开每页的参照物。在这里,我们可以 用操作符“>”或“<”号来完成这个使命。如:

Select top 10 * from table1 where id>200

于是就有了如下分页方案:

select top 页大小 *

from table1

where id>

(select max (id) from

(select top ((页码-1)*页大小) id from table1 order by id) as T

)     

order by id

这种方法执行 多少始终没有大的降势,后劲仍然很足。尤其对于数据量大的时候,该方法执行速度一点也不会降低。
使用TOP要求主键必须唯一,不能是联合主键。如果是联合主键,则查询出的结果会乱序的。
目前SQLServer2005提供了一个row_number()函数。ROW_NUMBER() 就是生成一个顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ReportID),其中ReportID可 以是联合主键。下面,我们看看怎么具体应用这个RowNo进行分页.
SELECT TOP 10 *  FROM
(
SELECT top 10 ROW_NUMBER() OVER (ORDER BY ReportID) AS RowNo
FROM TABLE
) AS A
WHERE RowNo > " + pageIndex*10
pageIndex就是我们需要数据的页数.

但对于SQLServer2000的话,如果是联合主键,我还没有解决办法,如果大家有可跟我联 系。谢谢大家了。

三、       ORCALE数据库 分页查询
ORCALE数据库实现分页查询可以使用 row_number()函数或者使用rownum 虚列两种方法。
第一 种:利用分析函数row_number() 方法
select * from(
select t.*,row_number() over (order by t1.id) rowno from TABLE1
)
where rowno between 21 and 40;

第二种:直接 使用rownum 虚列
select * from
(select t.*,rownum as rowno from TABLE1 )
where rowno between 10 and 20
这两种方法比较,显然第二种方法比较好。因为不用order by语句,会提高检索数据的速度的,尤其数据量越大时,第二种方法快速检索数据越明显。
最后提醒大家:oracle中慎用带有order by的分页。尤其是在oracle10g中,会出现会引起混乱,即相同记录会出现在不同页中。
SQL Server 2000 通用分页过程 采用top+max(ID)分页,其中keyword的选择对性能影响较大 立即下载

相关推荐

三大主流数据库神速上手(MySQL、MSSQL、Oracle)

该课程旨在针对数据库零基础学者,快速了解并上手三大数据库操作,同时也提出部分功能性函数等,提高开发过程中SQL组织的效率。 该课程以MySQL为起点,让学员通过一个轻量级的数据库的学习,从而快速掌握SQLServer,进而掌握稍有难度大Oracle数据库,达到循序渐进的功效,同时也能学习到基本DB知识之外的一些独到的知识点。希望学员通过本教程的学习能更加快速的掌握并上手开发。 本教程从基础的MySQL开始介绍,到SQLServer,然后Oracle,让学员能够从易到难,从Java或PHP语言到.Net,再到Java的数据库的灵活使用。其中分库介绍了,各个数据库的基本独立使用,以及各自的安装和配置。课程中主要是以SQL脚本为基础,带领学员更加牢固的掌握知识点。学员在学习的过程中能够体验到与普通数据库不同之处和一些非常实用性的脚本使用。例如:层次化查询,正则表达式以及技巧性函数等等

记录sqlserver2000的一次分页查询

【代码】记录sqlserver2000的一次分页查询。

m0_62681080的博客 424

sqlserver,mysql,oracle三种数据库的分页查询

sqlserver mysql oracle 三种数据库的分页查询比较

SQL Server 2000 分页查询

分别用 NOT IN 和 NOT EXISTS 实现: NOT IN: select TOP 10 * FROM student WHERE id not in (SELECT TOP (2*10) id FROM student) NOT EXISTS: SELECT TOP (10) * FROM student AS s1 WHERE NOT EXISTS (   SELECT

浅醉樱花雨的专栏 1061

浅谈Mysql、SqlServer、Oracle三大数据库的区别

主要介绍了Mysql、SqlServer、Oracle三大数据库的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Python地理空间库安装指南:从gdal到geopandas的完整流程

本文详细介绍了Python地理空间库的完整安装流程,包括gdal、rasterio和geopandas等核心库的安装与配置。通过Anaconda环境管理和conda-forge频道,帮助开发者高效解决依赖问题,确保地理空间数据处理环境的稳定运行。

weixin_29091105的博客 466

SQL Server中的分页查询

offset 20 rows 舍去前20行数据, fetch next 20 rows only 在向后取20条数据。:使用offset {行数} rows fetch next {行数} rows only。--后端代码也可以这样写。

qq_62298038的博客 1875

使用Docker搭建MaxKB智能体平台

【代码】使用Docker搭建MaxKB智能体平台。

janthinasnail的博客 711

[sql server] 分页 - sql server 2000

SQL常用分页的办法~~表中主键必须为标识列,[ID] int IDENTITY (1,1)1.分页方案一:(利用Not In和SELECT TOP分页)语句形式:   SELECT TOP 页记录数量 *FROM 表名WHERE (ID NOT IN  (SELECT TOP (每页行数*(页数-1)) ID  FROM 表名  ORDER BY ID))  ORDER BY ID//自己还可以加上一些查询条件例:select top 2 *from Sys_Material_Typewhere (MT_

永生天地 1万+

OJ(while+cin.get()判断结束)

今天要记录一道看起来十分简单的OJ题目,但开始对于cin的一些操作忘得差不多了,没做出来,故记下来给自己提个醒。 描述 给出包含N个单词的一行输入,输出N行。第一行和输入一样。每次输出过一行后,这一行的第一个单词在下一行被放到最后。 输入 包含N个单词的字符串,单词以一个空格分开。N不在输入中给出,你需要计算单词的数量来获得。字符串包含的字符数小于100。 输出 输出N行。...

Stark_JC的博客 2359

使用 Python 获取实时港股行情数据

在本教程中,你将学习如何通过 Infoway API 获取港股实时行情数据,具体以腾讯控股(0700.HK)和汇丰控股(0005.HK)为例,使用 Python 进行数据请求和解析。

kk_stoper的博客 1518

sqlserver2005和mysql_MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法...

在这里主要讲解一下MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法。可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用。下面就分别给大家介绍、讲解一下三种数据库实现分页查询的方法。一、 MySQL 数据库分页查询MySQL数据库实现分页比较简单,提供了LIMIT函数。一般只需要直接写到...

weixin_29095587的博客 242

小土堆学习笔记1:Dataset类代码实践

上一页中反复提到“类”,这究竟是什么东西?按我的理解(肯定不准确也不正式),class类就是某一个东西的共性,而且是等待被确认的共性。比如每台手机都有它自己的品牌、框架、价格等等属性,class类正是这些尚不确定的属性;而一旦确认了这些属性,就能够确认这到底是一台什么型号什么状态的手机,在确认了全部属性后就知道,这是一台Apple 16 Pro Max。抽象的不确定的共性就是类,具体的确定的个性就是示例。这个共性可以被用于多个编程目的,只不过某一个具体的编程行为还有它自己的独特性。

qq_40525602的博客 1626

MySQL、SqlServer、Oracle、DB2四大数据库分页查询

在 这里主要讲解一下MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法。可能会有人说这 些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用。 下面就分别给大家介绍、讲解一下三种数据库实现分页查询的方法。 一、 MySQL 数据库 分页查询 MySQL数据库实现分页比较简单,提供了 LIMIT函数

CTO成长之路——Rosanu 1595

(南京观海微电子)——TCON介绍

TCON又称:逻辑板,控制板,在液晶电视里的作用和CRT中的视放板相当,但有本质的区别,逻辑板不是一个纯粹的信号放大器,它输入是LVDS格式信号,而不是RGB。逻辑板的作用是把数字板送来的LVDS或TTL图像数据信号,时钟信号进行处理移位寄存器存储将图像数据信号,时钟信号转换成屏能够识别的控制信号行列信号RSDS控制屏内的MOSFET管工作而控制液晶分子的扭曲度。目前国内主要的TCON板生产商有视显光电。传统TCON的布局主要分为以下两种:X+C分离式和X+C一体式。

m0_75095200的博客 3835

Qt5.15.2配置安卓环境

否则,将会跳转到github,你可以自行下载解压到你设置的目录中,然后Qt会自动检测到。以上所需的工具确实有些繁多,而且如果单独下载又涉及科学上网问题,版本问题十分麻烦,好在Qt Creator 4.12之后已经可以自动下载SDK工具,NDK,基础包,openssl,以及gradle等,十分省心。回到正题,无论通过在线安装的方式,安装时勾选了Android,还是编译的方式,编译时编译了Qt Android库,想要使用Qt开发安卓应用仍然需要一些其他工作,包括安装编译安卓项目需要的SDK,NDK等。

weixin_41392061的博客 979

MySQL、SqlServer、Oracle三大主流数据库分页查询

在这里主要讲解一下MySQL、SQLServer2000、ORCALE三种数据库实现分页查询的方法。 下面就分别给大家介绍、讲解一下三种数据库实现分页查询的方法。 一、       MySQL 数据库分页查询 MySQL数据库实现分页比较简单,提供了 LIMIT函数。一般只需要直接写到sql语句后面就行了。  LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两

小和尚的专栏 459

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1483

数据库分页查询语句

在这里主要讲解一下MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法。可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用。 下面就分别给大家介绍、讲解一下三种数据库实现分页查询的方法。 一、       MySQL 数据库分页查...

月光如春风拂面 2920

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

mysql sqlserver分页_MySQL SQLServer ORCALE分页 (转载)

在 这里主要讲解一下MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法。可能会有人说这 些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用。下面就分别给大家介绍、讲解一下三种数据库实现分页查询的方法。一、 MySQL 数据库 分页查询MySQL数据库实现分页比较简单,提供了 LIMIT函数...

weixin_42520796的博客 151

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数据库分页查询

在这里主要讲解一下MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法。可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用。下面就分别给大家介绍、讲解一下三种数据库实现分页查询的方法。一、 MySQL 数据库分页查询MySQL数据库实现分页比较简单,提供了...

weixin_34138255的博客 850

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mysql数据库分页查询算法_数据库分页查询

在这里主要讲解一下MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法。可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用。下面就分别给大家介绍、讲解一下三种数据库实现分页查询的方法。一、MySQL数据库分页查询MySQL数据库实现分页比较简单,提供了LIMIT函数。一般只...

weixin_30974905的博客 497
上一篇: Oracle中NVL2 和NULLIF的用法
下一篇: 火狐(Firefox)插件Yslow使用心得
rtnull
博客等级 码龄16年 5粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值