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

时间:2013-04-25 07:01:32

标签: php mysql

我和我们的团队遇到了MySQL查询的奇怪问题。我们使用带有SELECT的{​​{1}}语句,并且由于某种原因,它在我们使用的客户端(SQLyog)中非常“快”,但是当我们使用PHP时,它确实很慢。

我们尝试使用古老的mysql_query(),mysqli扩展,我们也尝试使用PDO,但都没有区别。

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

定时结果:

客户:2.092秒 PHP:9.1071秒

这是我们使用的查询:

COUNT

*注意:对于此测试用例,我们在查询中添加了SQL_NO_CACHE,以确保始终获取新的结果集。*

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

MySQL:5.1.61 PHP:5.3.3

有任何解决此问题的建议吗?

1 个答案:

答案 0 :(得分:2)

我无法解释性能上的差异,但如果我不得不猜测我会说下面的一个或一些事情在起作用:

  • 由于客户端连接不同,服务器正在以不同方式优化您的查询,
  • 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" ;