Php 一个页面中的查询请求过多

Php 一个页面中的查询请求过多,php,mysql,Php,Mysql,我正试图以更好的方式重新编写我的一个旧应用程序。它不太大,但在加载时会运行大约80个查询。但仍会在2秒内加载到浏览器中。我可以优化一些查询,没关系。我的问题是,我应该担心这件事还是一切都好。加载页面的平均查询请求应该是多少?我想知道标准限制。每页查询没有限制。你确实有超时限制,但很明显你是在限制之内的 如果在n个结果上循环,也就是在嵌套数据模型中循环,那完全可以。 如果你没有,我相信这是有原因的。2秒对于页面加载来说有点长,但是我当然对你的页面一无所知 一页80字的查询并没有什么错,我只会问自己

我正试图以更好的方式重新编写我的一个旧应用程序。它不太大,但在加载时会运行大约80个查询。但仍会在2秒内加载到浏览器中。我可以优化一些查询,没关系。我的问题是,我应该担心这件事还是一切都好。加载页面的平均查询请求应该是多少?我想知道标准限制。

每页查询没有限制。你确实有超时限制,但很明显你是在限制之内的

如果在n个结果上循环,也就是在嵌套数据模型中循环,那完全可以。 如果你没有,我相信这是有原因的。2秒对于页面加载来说有点长,但是我当然对你的页面一无所知

一页80字的查询并没有什么错,我只会问自己一个问题,为什么

查找长查询的一个简单技巧,查看实际查询需要多长时间:

$start = microtime(1);
mysql_query('SELECT blah blah');
echo (microtime(1) - $start);

每页查询没有限制。你确实有超时限制,但很明显你是在限制之内的

如果在n个结果上循环,也就是在嵌套数据模型中循环,那完全可以。 如果你没有,我相信这是有原因的。2秒对于页面加载来说有点长,但是我当然对你的页面一无所知

一页80字的查询并没有什么错,我只会问自己一个问题,为什么

查找长查询的一个简单技巧,查看实际查询需要多长时间:

$start = microtime(1);
mysql_query('SELECT blah blah');
echo (microtime(1) - $start);
每页没有“标准查询计数”。例如,您可以使用“连接”,这可能会删除数百个单独的查询

然而,我更关心的是你的“不到2秒”加载意味着它超过1秒!如果是针对公共用户(例如,不是内联网),那么即使在普通计算机上,这也应该少于0.5秒!为了帮助实现这一点,请确保为整个页面启用输出缓冲(在php.ini中设置),因为这将大大提高页面加载速度。有关输出缓冲和压缩的更多信息,请参阅我的帖子:

每页没有“标准查询计数”。例如,您可以使用“连接”,这可能会删除数百个单独的查询


然而,我更关心的是你的“不到2秒”加载意味着它超过1秒!如果是针对公共用户(例如,不是内联网),那么即使在普通计算机上,这也应该少于0.5秒!为了帮助实现这一点,请确保为整个页面启用输出缓冲(在php.ini中设置),因为这将大大提高页面加载速度。有关输出缓冲和压缩的更多信息,请参阅我在这里的帖子:

我将不涉及查询,而是通过测量这些查询需要多少时间来开始

  • 数据库连接/数据库查询
  • 后端处理(业务)逻辑
  • 网络滞后
  • HTML呈现+任何javascript执行
其中任何一个都可能是罪魁祸首,甚至可能是其他原因。不过,很可能是其中之一。当你知道到底是什么花了时间,它应该为你指出正确的方向时,解决的情况


做一些真实的性能测试来备份这些数据也不会有什么坏处…

我会先不涉及查询,而是测量这些查询需要多少时间

  • 数据库连接/数据库查询
  • 后端处理(业务)逻辑
  • 网络滞后
  • HTML呈现+任何javascript执行
其中任何一个都可能是罪魁祸首,甚至可能是其他原因。不过,很可能是其中之一。当你知道到底是什么花了时间,它应该为你指出正确的方向时,解决的情况



做一些真实的性能测试来备份数据也不会有什么坏处…

限制是用户愿意忍受的。说实话,2秒钟似乎有点长。你能做任何类型的缓存吗?没有标准的查询/页面加载。最佳值为0。最糟糕的是超时。取决于您在页面中执行的操作。顺便说一句,无论你是唯一一个使用该页面的人,还是有100人同时访问你的页面,这都会产生很大的不同。如果你加载多个用户的数据,那么预先加载一个用户id数组,然后在一个查询中加载所有数据。是的,我能做到。我读了很多关于优化的书。但是,运行80个查询可以吗?尽管它们占用的时间不多。但是这安全吗?如果您在循环中有嵌套查询,那么您真的应该重构这些查询以使用join。限制是您的用户愿意忍受的。说实话,2秒钟似乎有点长。你能做任何类型的缓存吗?没有标准的查询/页面加载。最佳值为0。最糟糕的是超时。取决于您在页面中执行的操作。顺便说一句,无论你是唯一一个使用该页面的人,还是有100人同时访问你的页面,这都会产生很大的不同。如果你加载多个用户的数据,那么预先加载一个用户id数组,然后在一个查询中加载所有数据。是的,我能做到。我读了很多关于优化的书。但是,运行80个查询可以吗?尽管它们占用的时间不多。但这安全吗?如果您在循环中有嵌套查询,那么您真的应该重构这些查询以使用joinsBrilliant。我明白了。只是一个疑问。这些查询来自大约10000个用户,因此我如何避免死锁的可能性。对于死锁问题,很抱歉,这可能是一个更好的谷歌提问。感谢@vbhicker提供关于突发缓冲的建议和概念。死锁?为什么我在回答时会出现僵局?是的,我想这是另一个问题;)明亮的我明白了。只是一个疑问。这些查询来自大约10000个用户,因此我如何避免死锁的可能性。对于死锁问题,很抱歉,这可能是一个更好的谷歌提问。感谢@vbhicker提供关于突发缓冲的建议和概念。死锁?为什么我在回答时会出现僵局?赞成