我正在尝试调试的 PHP 应用程序在更大的 MySQL 数据库上运行了几个设计不当的查询。
有几个页面确实很慢,结果发现是因为一些查询。我开始一一检查每个查询,虽然它们很慢,但它们本身并没有那么慢。
经过进一步调试后发现,只有当应用程序将它们作为准备好的语句运行时,它们才会变慢。
如果我通过 MySQL 客户端手动运行查询,大约需要 300 毫秒。如果我通过 MySQL 客户端运行创建一条准备好的语句并设置参数并运行它,大约需要 300 毫秒。
如果我从 PHP (mysqli) 运行简单查询,大约需要 300 毫秒。
如果我像应用程序一样通过mysqli
预准备语句运行它,则需要 100 秒。
我想也许是这样,mysqli
所以我用PDO尝试了一下,结果是一样的。尝试了不同的 PHP 版本(5.6、7.2、7.3)并得到相同的结果。
所以我给了最后一次机会,写了一个小的 Go 脚本来测试,我得到了相同的结果,并且事情得到了改进。
现在,如果我从 MySQL 客户端或 MySQL Workbench 或 PHPStorms 数据库客户端运行查询的准备语句版本,速度会很快。如果我从代码中运行查询,速度会非常快。
任何关于我应该照顾什么、我应该在哪里继续调试的帮助将不胜感激。
人到中年有点甜
相关分类