高性能的大型系统经验 -- 数据查询与分页

     本文讨论针对大型数据表(记录数2千万以上)进行数据查找与分页的可行的高效方案。

     首先,恰当的索引是必须的。

     没有索引的支持,在大数据表中进行查询是不可思议的。关键点在于如何创建索引?

1.建立正确的聚集索引(clustered index)。由于聚集索引的叶子节点就是记录本身,所以选择哪个索引为聚集索引非常关键。通过聚集索引扫描记录更快。

2.根据你的系统的需求总结常用的单个查询条件或综合性的查询条件,对于常用的单个查询条件建立单列索引,对常用的综合性查询条件建立联合索引

3.关于数据库查询引擎如何利用索引,要注意以下几点:

(1)对于单列索引,只要条件列中出现索引列,无论在什么位置,都能利用索引查询。

(2)查询条件中出现联合索引第一列,或者全部,则能利用联合索引。

(3)条件列中只要条件相连在一起,无论前后,都会利用上联合索引。

(4)查询条件中没有出现联合索引的第一列,而出现联合索引的第二列,或者第三列,则都不会利用联合索引查询。 

    

     接下来,我们看如何进行分页。

1.利用索引(或联合索引)将满足条件的记录的主键列INTO到一个临时表(只有一列,与目标表的主键对应)。

2.Count (*) 临时表获取满足条件的记录的总数。

3.从临时表中获取第N页的主键值集合。

4.根据主键值集合从目标表中取出对应的记录以构成所要的Page。

5.释放临时表。      

     按照这种方式进行分页查询,如果满足条件的记录数在几万以内,分页查询都可在1秒内返回。

     最后提醒一句,不要轻易的在大数据表上执行不带条件的Select Count(*) From Table,该操作将非常耗时,而且由于扫描时会在目标表上加S锁,这段期间对目标表的Insert/update/delete操作将被阻塞,从而可能引发Insert/update/delete操作执行超时。 

 

注:本文源于我的SqlServer经验,可能在Oracle中有更好的办法,呵呵:)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一种基于Spring Framework的快速开发Web应用程序的框架,而Oracle是一种强大的关系型数据库。在一些大型项目中,我们需要使用多个表进行分页查询,并将查询结果呈现给用户,这时我们可以结合Spring Boot和Oracle实现多表分页查询。 实现多表分页查询需要引入Spring Boot的分页插件和Oracle的JDBC驱动。在查询数据之前,我们需要定义一个分页信息对象,包含要查询的页数、每页的数据量,以及查询结果的排序信息和过滤条件等。然后,我们可以使用Spring Boot提供的JdbcTemplate或MyBatis框架与Oracle数据库进行数据交互。 为了实现多表分页查询,我们需要在SQL语句中使用Join语句将多个表连接起来,并使用分页插件对查询结果进行分页处理。在处理分页查询时,我们可以采用传统的分页方式,即先查询出所有符合条件的记录总数,然后进行分页查询;也可以采用性能更高的Limit方式,直接指定查询结果的起始位置和数目。 在实现多表分页查询时,我们还需要注意查询效率和查询结果的正确性。通常情况下,我们可以对经常被访问和查询的表进行索引优化,提高查询速度。同时,我们还应该注意使用正确的字段进行Join和分组操作,避免查询结果出现重复数据或遗漏数据的情况。 在使用Spring Boot和Oracle进行多表分页查询时,我们需要掌握相关的知识和技术,才能更好地完成项目开发任务。为此,我们可以参考相关的教程和文档,了解其运行原理和应用场景,提高开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值