Me와 저희 팀이 MySQL 쿼리에 이상한 문제가 있습니다. 우리는 COUNT
과 함께 SELECT
문을 사용합니다. 그리고 어떤 이유에서 우리가 사용하는 클라이언트 (SQLyog)에서 꽤 빠르지 만 PHP를 사용할 때 속도가 매우 느립니다.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
어떤 제안이 문제를 해결하려면?
내가 추측이 있다면 나는 다음 중 한 가지 또는 몇 가지를 말하고 싶지만하지만 나는, 성능의 차이를 설명 할 수
당신의 PHP 코드를 보여주십시오. –
쿼리를 텍스트 파일에 저장하고 PHP 스크립트가있는 컴퓨터에서 다음 코드를 실행할 수 있습니다 : 'time mysql --user = user --password = pass file_get_contents ("query.sql"))); php -r '새로운 PDO ("mysql : host = ...; dbname = ...", "사용자", "패스" '' 시간 차이가 있는지 확인 하시겠습니까? –
core1024
PHP를 호스팅하는 컴퓨터에서 SQLyog를 실행하고 있는지 확인할 수 있습니까? 두 개의 다른 호스트에서 mySql 서버에 연결하는 경우 _Some_ 차이를 설명 할 수 있습니다. PHP 코드를 보여 주시겠습니까? – Sepster