【问题标题】:PHP mssql count rows in a statementPHP mssql 计算语句中的行数
【发布时间】:2015-07-20 16:53:18
【问题描述】:

我想计算查询返回的语句中的行数。我找到的唯一解决方案是:

  1. sqlsrv_num_rows() 对于这样一个简单的任务来说,这似乎有点太复杂了,我读到使用它会减慢执行速度
  2. 使用 SELECT COUNT 执行查询这种方法似乎没有必要,而且它会减慢执行速度,如果您已经有一条语句,为什么还要打扰另一个查询。
  3. 在生成表格时计算行数 因为我必须从语句中生成一个 html 表格,所以我可以在表格生成循环中放置一个变量并将其加一,但是这个只有在你已经有的时候才有效循环遍历整个语句。

我是否缺少一些基本功能和/或知识,或者没有更简单的方法?

感谢任何帮助或指导。

编辑:返回的语句只是原始表的一小部分,因此为此目的执行另一个查询是不切实际的。

【问题讨论】:

  • 您能否提供显示sqlsrv_num_rows 变慢的链接?另外,在我看来,如果你想要结果和计数,使用sqlsrv_num_rows 与使用select @@rowcount 需要同样的努力,因为你必须使用sqlsrv_next_result 然后sqlsrv_fetch(可能更多的努力)来获得计数。
  • @alalp 主要在这里:link 但我已经使用了这个 (sqlsrv_num_rows()) 方法,即使接近 200 000 行它也相当快。
  • 看来游标类型是影响性能的主要原因。我只是在实时使用的表上测试(使用微时间)sqlsrv_num_rows。在 100 次循环中,我调用了一个查询,它返回 appr。 150 行。 sqlsrv_num_rows 和在 while 循环中使用 sqlsrv_fetch() 递增计数器之间没有显着的时间差异。但是,在非常繁忙的服务器上可能会有所不同。

标签: php sql-server sql-server-2008 sqlsrv


【解决方案1】:

在 sql server 表中的行信息存储在目录视图和动态管理视图中,您可以使用它来查找计数

此方法仅适用于物理表。因此,您可以将记录存储在一个临时表中,然后将其删除

SELECT Sum(p.rows) 
FROM   sys.partitions AS p 
       INNER JOIN sys.tables AS t 
               ON p.[object_id] = t.[object_id] 
       INNER JOIN sys.schemas AS s 
               ON t.[schema_id] = s.[schema_id] 
WHERE  p.index_id IN ( 0, 1 ) -- heap or clustered index 
       AND t.NAME = N'tablename' 
       AND s.NAME = N'dbo'; 

更多信息请查看article

如果您不想执行另一个查询,请在查询后使用select @@rowcount。它将获取先前select 查询返回的行的count

select * from query_you_want_to_find_count 
select @@rowcount

【讨论】:

  • 感谢您的回答,但我正在寻找一种方法来计算返回语句的行数,而不是为此目的执行另一个查询
  • @gergalyb - 然后在查询后使用select @@rowcount
  • hmmm, select @@rowcount for me 返回 4 而我返回的语句很大
  • @gergalyb 确保在需要查找计数的选择查询旁边运行select @@rowcount 查询
  • 你的意思是紧接在一个查询之后或之内? (我在它之后运行它)@fireblade
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 2021-11-21
相关资源
最近更新 更多