Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的查询速度慢,但客户端中的查询速度快_Php_Mysql - Fatal编程技术网

PHP中的查询速度慢,但客户端中的查询速度快

PHP中的查询速度慢,但客户端中的查询速度快,php,mysql,Php,Mysql,我和我们的团队在MySQL查询中遇到了一个奇怪的问题。我们使用带有计数的SELECT语句,由于某种原因,它在使用SQLyog的客户端中相当“快”,但在使用PHP时速度非常慢 我们曾经尝试过使用古老的mysql_查询,mysqli扩展,我们也尝试过使用PDO,但都没有什么不同 在Stackoverflow的其他帖子中,我们发现这可能是一个DNS问题,可以使用my.ini中的“skip_name_resolve”进行修复,但我们的配置中已经有了这个问题 定时结果: 客户:2.092秒 菲律宾比索:9

我和我们的团队在MySQL查询中遇到了一个奇怪的问题。我们使用带有计数的SELECT语句,由于某种原因,它在使用SQLyog的客户端中相当“快”,但在使用PHP时速度非常慢

我们曾经尝试过使用古老的mysql_查询,mysqli扩展,我们也尝试过使用PDO,但都没有什么不同

在Stackoverflow的其他帖子中,我们发现这可能是一个DNS问题,可以使用my.ini中的“skip_name_resolve”进行修复,但我们的配置中已经有了这个问题

定时结果:

客户:2.092秒 菲律宾比索:9.1071秒

这是我们使用的查询:

*注意:对于这个测试用例,我们将SQL\u NO\u缓存添加到查询中,以确保始终获取新的结果集*

我们正在使用以下PHP和MYSQL版本:

MySQL:5.1.61 PHP:5.3.3


有什么建议可以解决这个问题吗?

我无法解释性能上的差异,不过如果要猜的话,我会说下面的一个或几个因素在起作用:

由于客户端连接不同,服务器以不同方式优化您的查询, SQLyog和PHP客户端的不同位置可能是一个因素 就像我说的,只是猜测

但不管怎样,我试图整理您的查询如下。我想知道这是否会表现得更好、更稳定

SELECT SQL_NO_CACHE
  COUNT(m.mm_id) AS total

FROM
  db.media_multimedia m

  INNER JOIN db.media_multimedia_category mc
  ON m.cat_id = mc.cat_id
  AND mc.cat_active = 1

  LEFT JOIN db.media_tag_multimedia a
  ON m.mm_id = a.mm_id

  INNER JOIN media.media_tag b
  ON a.tag_id = b.tag_id

WHERE 
  m.mm_published = 1
  AND 
  (
    m.mm_title LIKE "%denniy%"
    OR 
    m.mm_text LIKE "%denniy%"
    OR 
    b.tag_name LIKE "%denniy%"
  )
  AND m.mm_publishing_date >= "2012-04-24 00:00:00"
  AND m.mm_publishing_date <= "2013-04-24 23:59:59" ;

请显示您的php代码。您能否将查询保存在文本文件中,并在php脚本所在的同一台计算机上运行以下代码:time mysql-user=user-password=passfile\u get\u contentsquery.sql;'看看是否有时差?您能验证您是从托管PHP的同一台机器上运行SQLyog的吗?如果您是从两个不同的主机连接到mySql服务器,这可以解释一些差异。显示PHP代码吗?@core1024我们正在尝试此操作,我会尽快与您联系。@Sepster我们在本地计算机上运行SQLyog。我会用一些PHP代码更新我的帖子。谢谢你的评论!现在查询速度很快,但返回的结果与原始查询不同/错误。我认为,应该是INNER JOIN db.media\u tag\u multimedia,LEFT JOIN media.media\u tagb@JesperVeldhuizen很抱歉。我希望你能纠正我的疑问!。“现在让我知道这是否行得通。”约瑟夫·卡拉奎尔实际上,不,醒着的时候看这个,我认为这是不对的;左联接b中m.mm_id上的原始查询OR'd、not和'd,其中b表示不能丢弃m.mm_id不在..中的行,因此这是左联接。然而,左连接b,其中b实际上是b上的内部连接b,导致m左连接a内部连接b,因此我认为上面的答案现在与OPs查询等价。
SELECT SQL_NO_CACHE
  COUNT(m.mm_id) AS total

FROM
  db.media_multimedia m

  INNER JOIN db.media_multimedia_category mc
  ON m.cat_id = mc.cat_id
  AND mc.cat_active = 1

  LEFT JOIN db.media_tag_multimedia a
  ON m.mm_id = a.mm_id

  INNER JOIN media.media_tag b
  ON a.tag_id = b.tag_id

WHERE 
  m.mm_published = 1
  AND 
  (
    m.mm_title LIKE "%denniy%"
    OR 
    m.mm_text LIKE "%denniy%"
    OR 
    b.tag_name LIKE "%denniy%"
  )
  AND m.mm_publishing_date >= "2012-04-24 00:00:00"
  AND m.mm_publishing_date <= "2013-04-24 23:59:59" ;