【问题标题】:How to incorporate SQL_CALC_FOUND_ROWS and FOUND_ROWS() into existing web application如何将 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 合并到现有的 Web 应用程序中
【发布时间】:2010-10-11 07:13:52
【问题描述】:

我刚刚阅读了有关 mysql 的 SQL_CALC_FOUND_ROWS 和 FOUND_ROWS() 的信息,它们通过删除 LIMIT 条件来帮助您获得先前执行的查询的总结果大小。现在我想在现有的 Web 应用程序中使用此功能。

我有几种方法,但我不确定哪种方法最好:

1) PHP 是否已经有使用 FOUND_ROWS() 特性的函数?我正在使用带有 mysqli 的 php 5 和带有 innodb 存储引擎的 mysql 5。

2) 我正在构建的应用程序已经拥有自己的数据访问对象,该对象包装了 mysqli 库。它负责生成经常使用的 CRUD 查询。我是否应该编辑此对象以在所有 SELECT 查询中包含 SQL_CALC_FOUND_ROWS?可能存在哪些并发症?

还有其他想法/反馈吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    1) PHP 是否已经有使用FOUND_ROWS() 特性的函数?我正在使用带有 mysqli 的 php 5 和带有 innodb 存储引擎的 mysql 5。

    我以为mysql_num_rows 可以做到,但浏览了一下之后我想我可能错了。

    更新:是的,我错了:)

    2) 我正在构建的应用程序已经拥有自己的数据访问对象,该对象包装了 mysqli 库。它负责生成常用的CRUD 查询。我是否应该编辑此对象以在所有 SELECT 查询中包含 SQL_CALC_FOUND_ROWS?可能存在哪些并发症?

    SQL_CALC_FOUND_ROWS 将尝试计算如果您的查询中没有 LIMIT 子句将返回的行数。

    这将在一种情况下使用元数据:

    1. 当您的表使用 MyISAM 引擎时,AND
      • 当您的查询没有WHERE 子句时。

    在其他情况下,SQL_CALC_FOUND_ROWS 将逐行计算行数,从而影响性能。

    不要将它附加到每个查询中。

    【讨论】:

    • @Quassnoi:找不到关于 MyISAM(或 InnoDB)+SQL_CALC_FOUND_ROWS 的任何信息,您确定 InnoDB 会逐行计算吗?
    【解决方案2】:

    1.) 不,php 没有这样的功能。

    2.) 我认为最好只在真正需要时使用 SQL_CALC_FOUND_ROWS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2017-03-10
      • 2017-07-11
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多