SQL语句分页查询,一页面多少数据合适

SQL语句分页查询,一页面多少数据合适,第1张

2万条。

在SQLServer中通过SQL语句实现分页查询,在SQLServer中通过SQL语句实现分页后插入数据2万条,用更多的数据测试会明显一些。微软的SQLSERVER提供了两种索引:聚集索引,也称聚类索引、簇集索引和非聚集索引,也称非聚类索引、非簇集索引。

建立一个web应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存。游标一建立,就将相关的记录锁住,直到取消游标。游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的 *** 作。而对于多表和大表中定义的游标(大的数据集合)循环很容易使程序进入一个漫长的等待甚至死机。更重要的是,对于非常大的数据模型而言,分页检索时,如果按照传统的每次都加载整个数据源的方法是非常浪费资源的。现在流行的分页方法一般是检索页面大小的块区的数据,而非检索所有的数据,然后单步执行当前行。最早较好地实现这种根据页面大小和页码来提取数据的方法大概就是“俄罗斯存储过程”。这个存储过程用了游标,由于游标的局限性,所以这个方法并没有得到大家的普遍认可,后来,网上有人改造了此存储过程,实现了分页储存。

1.检查一下游标C1中查询语句的执行计划,看看是不是耗时很多。10万数据并不多,而且你做了函数索引。所以我猜这个不是问题产生的原因;

2.检查一下你的两层循环到底有多少次,是不是次数过多。目测不会超过10万吧。所以应该也不是问题关键;

*.以上两点可以通过使用plsql developer工具debug该过程时,点击create profiler report,然后执行,再从debug界面的profiler分页查看。

3.你的过程中 update cyd 和 fhz,执行过程的时候,有没有什么其他程序再多两个表做update,有没有锁表。cup使用率是否高;

4.通常不要在查询a表的循环中对a表update。你这里查询Cyd内部就对Cyd进行了update,这样有问题。我曾经遇到过,程序会锁住。

*.对于你的程序,给你个建议,把一下这段代码写成一个function,在由表中查寻结果中直接调用:

FOR i IN 1 .. Lengthb(Yw_Old) LOOP

Tmp := Substr(Yw_Old, i, 1)

IF (Tmp = 'A') THEN

Yw_New := Yw_New || 'B3'

ELSIF (Tmp = 'B') THEN

Yw_New := Yw_New || 'B3'

ELSIF (Tmp = 'C') THEN

Yw_New := Yw_New || 'C1'

ELSIF (Tmp = 'D') THEN

Yw_New := Yw_New || 'D1'

END IF

END LOOP

*.假设function叫做fun_pack,游标改成这样:

CURSOR C1 IS

SELECT Cyh,

fun_pack(Yw),

Pzyw,

Djyw

FROM Cyd

WHERE Substr(Slsj, 1, 4) = Yearc

游标作用:通常情况下,关系数据库中的 *** 作总是对整个记录集产生影响,例如使用SELECT语句检索数据表时,将得到所有满足该语句where子句中条件的记录,而在实际应用过程中,经常需要每次处理一条或者一部分记录。在这种情况下,需要使用游标在服务器内部处理结果集合,他可以有助于识别一个数据集合内部指定的记录,从而可以有选择的按记录执行 *** 作。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9977587.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存