2017-08-03 92 views
0

现在有一段时间我有这个问题,导致我的PHP花费20秒以上的时间来加载(甚至在包含Apache + SQL Server的主机上)。PHP/SQL - 查询到数组加载时间

谷歌浏览器网络报告

enter image description here

我已经做了一些挖掘周围,似乎像所有的数据转换到一个数组是罪魁祸首以下行。

$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个条目是有意义的)。

有没有办法优化这个,所以它不会暂停页面这么久?

感谢

+1

什么是你的开发设置(毫安/ XAMPP/VM?)也许你的电脑运行的RAM或您的PHP内存限制是非常低 –

+0

IIS的Windows Server 2016上,有DDR4的64GB,这样不应该成为问题... – kpjVideo

+0

这是什么?标签说“mysql”;第一段说“SQL Server”。 –

回答

1

如果您正在运行到性能问题,这将是最好的到底是什么问题是使用调试或日志机制来跟踪下来到底是什么花费很长的时间来隔离。

一对夫妇的低效立刻脱颖而出是:

  • 您的查询在两个不同的方向,可以引起全表扫描,如果没有正确的索引排序。
  • 对您的查询没有限制通常是不好的做法。这张表可能真的很大,导致资源分配问题。
  • 最后,如果您遇到了这么长时间的事情,很可能您的内存已满并正在交换到磁盘。 ini_set('memory_limit','16M');
+0

啊我看到了,我不确定要限制它,因为页面需要表格中的所有数据。我也尝试设置内存限制,但没有运气:(。你会推荐什么来保持查询在“同一方向”,以便数据仍然可以用作数组以后?第一点听起来最可能 – kpjVideo

+0

只55行,因此本答案中的大部分内容不能解释16秒查询。 –

+0

在'ORDER BY'上混合使用ASC和DESC只能防止使用'INDEX';否则不会减慢速度。 –