Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与在SQL中使用Count()相比,提取33000条记录集花费的执行时间更少。这怎么可能?_Sql_Count_Recordset - Fatal编程技术网

与在SQL中使用Count()相比,提取33000条记录集花费的执行时间更少。这怎么可能?

与在SQL中使用Count()相比,提取33000条记录集花费的执行时间更少。这怎么可能?,sql,count,recordset,Sql,Count,Recordset,事先谢谢你对我的容忍 与在SQL中使用Count()并仅获取20行相比,从数据库中提取33000条记录集所花费的执行时间更少 这怎么可能 更详细一点: 以前,我们抓取整个记录集,但一次只在页面上显示其中的20行进行分页。这是一种令人畏缩和浪费的行为,因此我重新设计了页面,一次只抓取20行,并简单地使用索引变量抓取下一页,以此类推 一切都很好,但这缺乏我们人民所需要的记录 因此,在记录查询之后,我使用结构化查询语言中的Count(index)函数添加了(我认为是)一个关于表索引的快速查询 对原始页

事先谢谢你对我的容忍

与在SQL中使用Count()并仅获取20行相比,从数据库中提取33000条记录集所花费的执行时间更少

这怎么可能

更详细一点:

以前,我们抓取整个记录集,但一次只在页面上显示其中的20行进行分页。这是一种令人畏缩和浪费的行为,因此我重新设计了页面,一次只抓取20行,并简单地使用索引变量抓取下一页,以此类推

一切都很好,但这缺乏我们人民所需要的记录

因此,在记录查询之后,我使用结构化查询语言中的Count(index)函数添加了(我认为是)一个关于表索引的快速查询

对原始页面和我的新页面进行并排比较表明,我的新页面的执行时间比原始页面长约10%!我大吃一惊。我确信它会闪电般地快,比原来的快多了

有没有想过我为什么以及我会做些什么来补救

是否因为脚本必须运行两个查询,而不管检索到的数据是什么

更新:

下面是SQL语句

(为了安全起见,本文将表名和字段名虚拟化,但结构与真实页面相同)

主记录集选择查询包含:

SELECT
    top 21 roster_id, roster_pplid, roster_pplemailid, roster_emailid, roster_firstname, 
    roster_lastname, roster_since, roster_pplsubscrid, roster_firstppldone, roster_pmtcurrent, 
    roster_emailverified, roster_active, roster_selfcanceled, roster_deactreason 
FROM roster
WHERE
    roster_siteid = 22
    AND   roster_isdeleted = false
order by roster_id desc
SELECT
    COUNT(roster_id)
FROM
    roster
WHERE
    roster_siteid = 22
    AND   roster_isdeleted = false
记录计数查询包含:

SELECT
    top 21 roster_id, roster_pplid, roster_pplemailid, roster_emailid, roster_firstname, 
    roster_lastname, roster_since, roster_pplsubscrid, roster_firstppldone, roster_pmtcurrent, 
    roster_emailverified, roster_active, roster_selfcanceled, roster_deactreason 
FROM roster
WHERE
    roster_siteid = 22
    AND   roster_isdeleted = false
order by roster_id desc
SELECT
    COUNT(roster_id)
FROM
    roster
WHERE
    roster_siteid = 22
    AND   roster_isdeleted = false

第一个查询运行,然后第二个查询运行。第二个总是动态地具有相同的匹配WHERE filter。

我想我知道它为什么较慢,我使用GetRows在新页面中获取记录集,而不是在旧页面中使用。这似乎就是经济放缓。但我必须使用它,否则就无法超越第21项记录


Nick.McDermaid:显示的SQL正在选择前21行,这就是它仅获取20行的方式(第21行只是为了填充“下一个”页面链接的索引)

sql在哪里?我没有粘贴sql,因为它更像是一个理论问题,但我会尝试将它的一个版本组合起来,并在这里继续。谢谢。您是否通过在SSM中运行原始sql来比较它们的运行时间?现在如何编写代码来运行这两个sql语句?在打开连接、执行命令、解析数据结果和关闭连接时会有一些应用程序开销。这可能是旧的速度和新的速度的区别吗?另一个区别是“一次只能抓取20行”对吗?不清楚你是怎么做到的。发布的SQL查询并没有做到这一点——它仍然在获取所有信息。我是说这里有两件事已经改变了。您需要对这两个查询(在代码中)计时,然后才能假定计数将所有时间相加。它还可能有助于指示数据库服务器的实际类型。(SQL Server?Oracle?)
false
不是我熟悉的一种SQL。似乎
row\u number
加上
分区by
可能会起到作用。。。我无法想象计数会花费很长时间,除非你的索引没有包括
名册(isdeleted
)。很抱歉我错过了
顶部
位。所以,要获得第21-40行,是否使用前41行?不管怎样,你的问题标题肯定是误导性的。不知道你在这种情况下会做什么。可能会问一个新问题,但这次使用两个不同的代码示例,链接到此问题。