[英]Query slow in PHP but fast in client
我和我們的團隊遇到了MySQL查詢的奇怪問題。 我們使用帶有COUNT
的SELECT
語句,由於某種原因,它在我們使用的客戶端(SQLyog)中非常“快”,但是當我們使用PHP時它確實很慢。
我們試圖使用古老的mysql_query(),mysqli擴展,我們也嘗試使用PDO,但都沒有區別。
在Stackoverflow上的其他帖子中,我們發現它可能是一個DNS問題,並且可以使用my.ini中的'skip_name_resolve'進行修復,但我們已經在配置中使用了它。
定時結果:
客戶:2.092秒PHP:9.1071秒
這是我們使用的查詢:
SELECT SQL_NO_CACHE
COUNT(m.mm_id) AS total
FROM
db.media_multimedia m
WHERE m.cat_id IN
(SELECT
mc.cat_id
FROM
db.media_multimedia_category mc
WHERE mc.cat_active = 1)
AND m.mm_published = 1
AND (
m.mm_title LIKE "%denniy%"
OR m.mm_text LIKE "%denniy%"
OR m.mm_id IN
(SELECT
a.mm_id
FROM
db.`media_tag_multimedia` a
LEFT JOIN media.`media_tag` b
ON a.`tag_id` = b.tag_id
WHERE 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" ;
*注意:對於此測試用例,我們在查詢中添加了SQL_NO_CACHE,以確保始終獲取新的結果集。*
我們使用以下PHP和MYSQL版本:
MySQL:5.1.61 PHP:5.3.3
有什么建議可以解決這個問題?
我無法解釋性能上的差異,但如果我不得不猜測我會說下面的一個或一些事情在起作用:
就像我說的那樣,只是猜測。
但無論如何,我試圖按如下方式整理您的查詢。 我想知道這可能表現得更好(並且更一致)嗎?
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" ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.