为什么简单的MySQL查询需要超过5秒才能执行?

时间:2011-12-07 19:19:17

标签: php performance mysqli

更新2011/12/12:现在我的(基于IIS)托管包被隔离为FastCGI。我让他们把它关掉,因为预定的任务一直在超时。我知道我现在在哪里。再次感谢,所有。

Mark Iliff


更新2011/12/11:好的,我必须把手放在无意的误导之下。

感谢您提出的许多建议,我现在认为这是我托管软件包上PHP页面的一个问题,而不是MySQL。一个空的PHP页面仍然需要5-6秒才能加载,而带有ASP或HTML扩展名的同一页面加载速度太快而无法测量。我正在接受我的托管服务提供商。

很抱歉没想到要先检查这个并感谢投球:非常感谢。

Mark Iliff


我对MySQL / PHP比较陌生,并怀疑我做了以下愚蠢的事情:

        <?
        // Slave page: block/unblock merchant
        $id = $_POST["id"] ;
        $val = $_POST["val"] ;

        if ( isset( $id ) && isset( $val ) ) {
            $conx = mysqli_connect ( "sql05", $dbAc, $dbPwd, "finewine" ) 
                or die ("Conx failed") ;

            // update record
            $sql = "UPDATE wsMerchants SET 
                blockem = ".$val.", updateDT = '".date( "Y-m-d H:i:s" )."' 
                WHERE id = ".$id.";" ;
            $result = mysqli_query( $conx, $sql ) ;

            //tidy
            mysqli_close( $conx ) ;
            };
        ?>

Result of SHOW CREATE:
CREATE TABLE `wsmerchants` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 `merchant` text NOT NULL,
 `country` tinytext NOT NULL,
 `blockem` tinyint(1) DEFAULT '0',
 `benchmark` tinyint(1) DEFAULT '0',
 `createDT` datetime NOT NULL,
 `updateDT` datetime NOT NULL,
 UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8

我是从JQuery调用它的(使用$.post)。 db表有29条记录和7个字段。

它有效,但速度非常慢。

对于所有实际目的,这样的悲伤旧Access (+ Classic ASP)查询是即时的。在MySQL中,根据Firebug中的计时器,查询需要5-6秒。

我在托管的Windows环境中运行MySQL 5.0.51a + PHP 5.2.13

我已经解决了其他问题,但它们似乎主要涉及复杂的SQL查询。

3 个答案:

答案 0 :(得分:0)

除了其他问题,我怀疑这里的瓶颈是查询。

首先,从MySQL控制台尝试查询以确保数据库服务器正常。

然后,创建一个只连接到数据库并且不执行任何查询的简单测试脚本。确保在连接呼叫之后放置一些内容,以便您可以看到它何时完成连接。

无论如何,这是我的猜测 - 瓶颈在于数据库连接。

还有一件事,这是Windows中的AMP堆栈(WAMP,XAMPP),还是通过IIS运行PHP?

答案 1 :(得分:0)

我在该查询中看不到任何需要> 5秒的内容。 Firebug可能会给你总的请求时间,而不仅仅是查询。也就是说,如果客户端和应用程序服务器或应用程序服务器和数据库之间的延迟特别高,则5秒不是不可想象的。我将首先对脚本进行基准测试,以确定究竟需要花费多长时间。您可以通过在整个脚本中使用microtime()获取时间戳,然后减去它们以确定脚本的每个部分所花费的时间来完成此操作。

答案 2 :(得分:0)

从评论中的对话来看,您的问题似乎与网络有关,而不是与您的代码有关。我的直觉告诉我这可能是DNS问题,在这种情况下,您可能需要查看MySQL手册的this section。或者,尝试在连接字符串中使用IP地址而不是"sql05",看看是否加快了速度。