`
lippeng
  • 浏览: 455188 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Sybase分页查询

 
阅读更多

Sybase的分页,可以说,不是一般的难做。因为这数据库本身,支持太差。搞不懂为什么一个商业数据库,这么基本的功能,都弄的这么难做。

 

想起一段话:做简单的事情要简单,复杂的事情要能做。

 

分页查询,应该归入简单的事情吧!

 

在网上找到的,关于分页查询的SQL,看上去都挺有道理的,放到Sybase上一跑,就发现,几乎全部不能运行,直接给你报错。

 

我认为问题主要集中在Sybase对子查询的支持上。Sybase对子查询的支持,非常非常的有限。所以,先说说Sybase对子查询的支持吧!

 

网上有一篇博客,写的不错,说的是Sybase支持与不支持的子查询:

 SYBASE数据库支持与不支持的子查询语句的归纳总结

 

当我看到支持 >, <,  in, not in 的子查询时,有点狂喜,认为一句SQL能搞定分页的。于是,我欣喜的写下以下2种方案:

 

方案一(不能用的哦):

 

select top <pageSize> *
from <table>
where <id> > (select max(<id>)
			from (select top (<pageSize> * (<pageNum> - 1))
					from <table>
					order by <id>)
			order by <id>)
order by <id>
 

方案二(同样不行的哦):

 

select top <pageSize> *
from <table>
where <id> not in (select top (<pageSize> * (<pageNum> - 1))
			from <table>
			order by <id>)
order by <id>
 

想归想,写的时候,就发现 方案一 很不靠谱。在子查询里面 再用 子查询,并且 还用在from里面,不靠谱,很不靠谱。一运行,果然不能跑。

 

方案二,看上去挺好,只有一个子查询,并且是Sybase支持的类型,是真支持的。但是(不好意思,还是转折了),很遗憾的告诉你,也是不能跑的。

 

这个方案有2个问题:

1、子查询中,用了top。Sybase的子查询中,不能用top的,测了才知道;

2、子查询中,用了order by。Sybase的子查询中,是不能用order by的,测了才知道。

 

 

现在看来,除了写存储过程外,真的没办法了。

 

但是,不愿意用存储过程。

 

只能分多条SQL来完成这一件事。

 

于是,就出现了以下方案:

 

方案三(可以用):

 

select top (<pageSize> * (<pageNum> - 1))
from <table>
order by <id>

从上面SQL中取出 max(id)

select top <pageSize> *
from <table>
where <id> > max(id)
order by <id>
 

这样分2个SQL,在数据库之外,找出前N-1页最大的ID,作为第2个SQL的条件,来完成分页查询。 

 

虽然麻烦点,也算是一种解决方案吧!

 

暂时还没想到更好的方案,谁有的话,告诉我呀。

 

 

 

 

 

1
0
分享到:
评论
2 楼 li5220008 2014-06-23  
非常感谢!我们项目组借鉴了你的思想,实现了!
1 楼 louishunt 2013-04-12  
领教了!!!

相关推荐

    sybase 实现分页的存储过程

    这种情况下,就需要在数据库层面实现高效的分页查询机制。本文将详细介绍如何在 Sybase 中通过编写存储过程来实现分页功能。 #### 存储过程概述 在 Sybase 中,存储过程是一种预编译的 SQL 代码块,它可以接受输入...

    sybase分页代码使用jdbc分页速度快适合大数据

    本篇文章将详细讲解如何利用JDBC在Sybase数据库中进行高效的分页查询。 首先,理解分页的基本概念。分页是将大结果集分割成较小的部分,每次只返回一部分数据,通常由页码和每页记录数来定义。在Sybase中,可以使用...

    分页的sql总结

    在众多的SQL操作中,分页查询是数据库管理员和开发人员频繁使用的场景之一,尤其是在处理大量数据时,有效地进行分页不仅能够提升查询性能,还能优化用户体验。以下是对分页SQL查询技术的深入解析,旨在帮助读者理解...

    sybase分页存储过程(代码)

    sybase分页存储过程(代码),分页存储过程代码,实现sybase数据库分页查询。

    sybase通用分页模块

    标题中的“sybase通用分页模块”指的是在Sybase数据库管理系统中实现的一种功能,用于处理大量数据时的分页查询。这种模块对于提高系统性能、优化用户体验至关重要,尤其是在数据分析、报表展示或者网页应用中,用户...

    sybase分页优化带排序

    总之,Sybase分页优化带排序是一个涉及多方面技术的问题,包括选择合适的分页方法、利用窗口函数、优化索引、使用存储过程等。在实际操作中,应根据具体的数据规模、查询模式和系统资源来制定最佳策略。通过这些方法...

    sybase海量数据分页瞬间完成2.0

    在处理大数据集时,分页查询是必不可少的技术,它允许用户逐步加载和查看结果,减轻服务器压力,提升用户体验。本文将深入探讨"sybase海量数据分页瞬间完成2.0"这一主题,以及相关的JDBC分页和代码分页策略。 首先...

    BluePage通用分页类助开发者提高开发效率1

    无论是数据库查询结果的分页展示,还是长篇文章的分页阅读,都需要一个高效、灵活的分页解决方案。BluePage正是为了满足这一需求而设计的通用分页类库。 #### 二、设计原则 1. **分页与SQL无关**:分页逻辑应该...

    sybase ASE 15.0.3版各功能在所有平台上的可用性

    - **Archived Database Access**:归档数据库访问功能在所有平台上均支持,便于历史数据的查询和分析。 #### 重要注释 - 功能的可用性可能因不同的ASE版本而异,请参考ASE数据表了解各版本间的差异。 - SSL、...

    分页条优化插件 for blog.rar

    启用该插件后,分页条将采用更为合理的格式显示,读取系统模板,不用重建,即刻生效。 更新记录: [08.12.23] 修正了当前页数为第1页或最后页时上下页导航出错问题 [08.09.12] 修正当前页数大于显示页数后无法...

    独立的跨数据库的分页

    本文将深入探讨“独立的跨数据库的分页”这一主题,结合Java编程语言,阐述如何实现对Oracle、Sybase、SQL Server、MySQL等不同数据库系统的通用分页查询。 首先,我们需要理解什么是分页。分页是一种将大量数据...

    C#使用ODBC连接SYBASE数据库的方法

    3. **性能优化:**针对大型数据集的查询,应考虑分页查询等技术以提高系统的响应速度。 4. **资源管理:**使用`using`语句可以自动释放资源,避免内存泄漏等问题的发生。 综上所述,通过C#和ODBC连接Sybase数据库的...

    sybase sqlanywhere5.0

    SQL Anywhere 5.0是由Sybase公司开发的一款轻量级数据库管理系统,它以其强大的移动和嵌入式数据库解决方案而闻名。在中石油等大型企业中,SQL Anywhere常用于管理各种关键业务数据,确保在分布式环境下的高效运行和...

    SYBASE技术资料

    - SYBASE中的分页查询可能需要使用特定的语法或函数来实现,而**ORACLE**提供了更简便的解决方案。 **2. 聚合函数支持** - **SYBASE**与**ORACLE**都支持常见的聚合函数,但在一些高级聚合功能上可能有所不同。 ...

    基于JavaBean的分页技术

    分页的基本原理是将查询结果集按照一定的规则进行分割,每次只展示其中的一部分。具体步骤包括: 1. **确定每页显示的记录数**:这是分页的基本参数。 2. **计算总页数**:根据总的记录数和每页显示的记录数计算出总...

    sybase性能调休指南

    - 通过适当的配置,Sybase可以查询其他类型的数据库系统。 11. **用子查询替换连接** - 在某些情况下,使用子查询可以替代复杂的表连接,提高查询效率。 #### 五、查询优化 1. **实现结构化查询提示** - 使用...

    sybase开发参考.pdf

    分页查询在大数据量场景下常见,通过LIMIT或OFFSET/FETCH关键字(具体语法取决于数据库系统)来限制返回结果的数量,同时结合ORDER BY来控制顺序。避免全表扫描,可以结合索引来提高分页效率。 2.4 使用 tempdb ...

    Sybase IQ 15.4参考手册(性能调优)

    Sybase IQ 15.4提供了分页技术来增加可用内存,并通过监控交换的实用程序来监控内存的使用情况。服务器内存是数据库性能的关键,因此需要管理好缓冲区高速缓存的大小。缓冲区高速缓存的大小应根据数据库的实际工作...

    Sybase IQ 15.1 性能调优手册中文版

    本手册《Sybase IQ 15.1 性能调优手册》旨在为用户提供一套全面的性能调优指南,帮助用户了解如何优化Sybase IQ 15.1的数据查询、连接以及其他操作,从而提高整体系统的性能。该文档覆盖了从基本的查询优化到高级的...

Global site tag (gtag.js) - Google Analytics