首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么一个简单的MySQL查询需要超过5秒才能执行?

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

Stack Overflow用户
提问于 2011-12-07 19:19:16
回答 3查看 1.8K关注 0票数 0

更新2011/12/12:在我的(基于IIS的)主机包中,现在被隔离为FastCGI。我让他们关掉它,因为一个预定的任务一直在超时。我知道我现在在哪。再次感谢各位。

马克·伊利夫

更新2011/12/11:好的,我必须举起我的手,以避免无意中的误导。

由于您的许多建议,我现在发现这是我的托管包中的PHP页面的一个问题,而不是具体的MySQL。一个空的PHP页面仍然需要5-6秒的时间来加载,而带有ASP或HTML扩展的页面加载速度太快,无法测量。我要和我的主机提供商谈这个。

很抱歉没有想过要先检查一下,谢谢投球:非常感谢。

马克·伊利夫

我对MySQL/PHP还比较陌生,并且怀疑我正在做一些愚蠢的事情:

代码语言:javascript
复制
        <?
        // 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查询。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-07 19:25:25

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

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

然后,制作一个简单的测试脚本,它只连接到数据库,不执行任何查询。确保在connect调用之后放置了一些东西,这样您就可以看到它何时完成连接。

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

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

票数 0
EN

Stack Overflow用户

发布于 2011-12-07 19:28:29

在这个查询中,我没有看到需要>5秒的任何内容。Firebug可能会给您整个请求的时间,而不仅仅是查询时间。也就是说,如果客户机与应用服务器或应用服务器与数据库之间的延迟特别高,那么5秒就不是不可想象的。首先,我要对脚本进行基准测试,找出究竟是什么花了这么长时间。您可以通过在整个脚本中使用microtime()获取时间戳,然后减去它们来计算脚本的每个部分所花费的时间。

票数 0
EN

Stack Overflow用户

发布于 2011-12-09 16:57:01

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8421161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档