【问题标题】:PHP: Slow query executionPHP:查询执行速度慢
【发布时间】:2013-02-13 00:54:34
【问题描述】:

我有这个登录系统:

    require_once "conexion.php";


    class login extends conexion {



    public function log_user($user,$pass)
        {
        $conexion = mysql_conexion();
            $login = "SELECT user_name,user_pass,id FROM menssager_user WHERE user_name='$user' AND user_pass='$pass'";
                $e = $conexion->prepare($login);
                    $e->execute();

                $re = $e->fetch(PDO::FETCH_ASSOC);

                    if($user == $re["user_name"] && $pass == $re["user_pass"])
                    {

                    $this->is_online($re["id"]);
                    return $re["id"];
                    }

        $conexion = null;

        }   }

当我执行该代码时,需要 1.3 秒才能确定该用户是否存在并且我在数据库中只有 2 个用户名。 谁能告诉我为什么这么慢? 注意:昨天我升级到5.4.7并重新编写代码(针对该版本的新功能)。

更新:

和数据库连接:

class conexion{

        public function mysql_conexion(){

            $conexion_path = "mysql:dbname=menssager;host:127.0.0.1";
                $root = "root";
                $pass = "";

                try{

                    $conectar = new PDO($conexion_path,$root,$pass);
                    $conectar->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
                    $conectar->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                }catch(PDOException $error)
                {
                    echo $conectar = $error->getMessage();
                }
                return $conectar;

        }
    }

【问题讨论】:

  • 你有关于 user_name 和 user_pass 字段的索引吗?虽然只有两行,但我仍然对查询如何花费这么长时间感到有些困惑,除非您在该表中有很多其他字段以及大量数据和/或糟糕的硬件设置。另外,为什么还要麻烦返回 user_name 和 user_pass 值并重新验证它们。在您创建准备好的语句和进行比较之间并没有改变。最后,如果你打算使用准备好的语句,你实际上应该使用绑定参数来传递你的数据。
  • 它不仅在登录系统中。我也有一个简单的查询,我用它来知道用户是否在线,它也需要 1.2 秒。自从我开始使用扩展 php 以来,我的查询执行速度非常慢。
  • 什么是extends php
  • 如果我直接在数据库中查询,只需要0.0004s执行并显示结果。
  • @EinerSantanaR 这很能说明问题,很可能是您在设置连接时的代码存在问题。您可以轻松地使用microtime() 在您的应用程序中添加计时器,以查看实际花费的时间。

标签: php performance


【解决方案1】:

虽然您仍在测量连接与执行时间,但我将冒险猜测答案。我认为您的连接时间是导致延迟的原因。查看之前提出的类似问题。 https://serverfault.com/questions/408550/connecting-to-mysql-from-php-is-extremely-slow

关闭反向 DNS 查找可能会对您有所帮助。 添加一个显示如何关闭它的链接:

http://developers.sugarcrm.com/wordpress/2012/01/10/howto-turn-off-mysql-reverse-dns-lookup-to-speed-up-response-times/

【讨论】:

  • 不,同样的问题。 OMG 还在 1 秒内
  • 所以,在花了几个小时来解决这个问题之后,我遇到了这篇文章,我刚刚做的是第一个 faq.webyog.com//content/23/36/en/… 我希望能帮助别人。现在执行需要 21 毫秒:D
  • 您的问题解决了真是太好了!但是,即使您已经为 localhost 的条目修复了 etc/hosts 文件,当您从各种在服务器的 hosts 文件中没有任何条目的外部客户端计算机进行连接时,您仍然可能会遇到问题。我认为您需要更改 mysql 配置以确保它不会浪费时间查找客户端的名称。
猜你喜欢
  • 2016-06-08
  • 2019-07-27
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多