【问题标题】:PHP/SQL - Query to Array Load TimePHP/SQL - 查询数组加载时间
【发布时间】:2017-08-03 23:42:34
【问题描述】:

一段时间以来,我遇到了这个问题,导致我的 PHP 需要超过 20 秒才能加载(即使在包含 Apache + SQL Server 的主机上也是如此)。

Google Chrome 网络报告

我已经进行了一些挖掘,似乎以下将所有数据转换为数组的行是罪魁祸首。

 $sql = "SELECT  `date`, `type`, `author`, `commit_file`,
                 `description`, `commit_num`
    FROM  ".$tablename."
    ORDER BY  date, commit_num, type DESC";

define('MYSQL_BOTH',MYSQLI_BOTH);
define('MYSQL_NUM',MYSQLI_NUM);
define('MYSQL_ASSOC',MYSQLI_ASSOC);

define('personaname', 'personaname');
define('players', 'players');
define('response', 'response');
define('avatarmedium', 'avatarmedium');

$result = $conn->query($sql);

$retrievedData = $result->fetch_all(MYSQLI_ASSOC);

最后一个赞(特别是fetch_all)会导致页面加载时间过长。我试过直接在 SQL 中运行查询,它只需要 0.078 秒(只有 55 个条目,这样才有意义)。

有没有办法对此进行优化,使其不会长时间停止页面?

谢谢

【问题讨论】:

  • 您的开发设置是什么(MAMP/XAMPP/VM?)可能您的计算机内存不足或者您的 PHP 内存限制非常低
  • Windows Server 2016 上的 IIS,有 64GB 的 DDR4,所以这不应该是问题...
  • 它是什么?标签上写着“mysql”;第一段说“SQL Server”。
  • 行有多大?例如,description 是千兆字节的字符串吗?

标签: php mysql arrays performance fetchall


【解决方案1】:

如果您遇到性能问题,最好使用调试或日志记录机制准确找出问题所在,以准确追踪需要很长时间的问题。

立即突出的几个低效率是:

  • 您的查询在两个不同的方向排序,如果索引不正确,可能会导致全表扫描。
  • 对查询不设限制通常是不好的做法。此表可能会很快变得非常大,从而导致资源分配问题。
  • 最后,如果您遇到需要这么长时间的东西,很可能是您的内存已满并且正在交换到磁盘。 ini_set('memory_limit','16M');

【讨论】:

  • 啊,我明白了,我不确定是否要限制它,因为页面需要表内的所有数据。我也尝试过设置内存限制,但没有运气:(。你会建议将查询保持在“同一方向”,以便以后数据仍可用作数组?第一点听起来最有可能跨度>
  • 只有 55 行,所以这个答案中的大部分项目无法解释 16 秒的查询。
  • ORDER BY 上混合ASC 和DESC 只会阻止INDEX 的使用;它不会减慢速度。
猜你喜欢
  • 2016-01-22
  • 2018-11-08
  • 1970-01-01
  • 2015-02-16
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多