2009-09-24 3 views
1

ID 배열 또는 단일 ID를 인수로 사용하는 함수가 있습니다. 배열이 전달되면 ID 쿼리를 쉽게 사용할 수 있도록 쉼표로 내포됩니다.쿼리 성능을 올바르게 테스트하는 방법

이 함수에는 전달 된 ID의 레코드를 업데이트하는 쿼리가 있습니다.

"UPDATE tbl_name SET enabled = 1 WHERE ID IN (" . $IDs . ")"; 

를 같은 배열과 뭔가 쿼리 위 그쪽을 이용와 성능 문제가 있는지 궁금 해요, 이제 : 다음과 같이

쿼리는

"UPDATE tbl_name SET enabled = 1 WHERE ID = " . $IDs; 

만있는 경우 단일 ID가 전달됩니다.

MySQL 쿼리 브라우저에서 두 쿼리를 동일한 ID로 테스트했으며 두 쿼리 모두 0.02 초의 성능을 보였습니다. 이는 성능면에서 약간의 차이가있었습니다.

쿼리 브라우저에서 두 쿼리를 테스트하여 최적의 쿼리 성능을 확인하는 것이 좋습니다.

필자가 필요하지 않은 경우 하나의 함수에서 두 개의 쿼리로 코드를 오염시키지 않기를 바랄뿐입니다.

답변

1

나는 두 번째 쿼리를 잃어 버리고 코드를 읽기 쉽고 유지하기 쉬운 첫 번째 쿼리 만 남겨 두었습니다.

if (is_array($id)) $id = implode(',', $id); 
$query = 'UPDATE table SET marked = 1 WHERE id IN ('.$id.')'; 

는 이러한 샘플 쿼리 중 하나를 얻을 수 있습니다 그 방법 : 모든 값이 상수 인 경우

:

여기
UPDATE table SET marked = 1 WHERE id IN (15); 
UPDATE table SET marked = 1 WHERE id IN (21,12,15,16); 

는 MySQL의 매뉴얼은 IN 연산자의 사용에 대한 말씀입니다 , 그들은 expr의 유형에 따라 평가되고 정렬됩니다. 그런 다음 이진 검색을 사용하여 항목 검색이 완료됩니다. 이것은 IN 값 목록이 완전히 상수로 구성되어 있으면 IN이 매우 빠름을 의미합니다.

또한 "깨지지 않은 문제를 수정하지 말고"깨끗하고 읽기 쉽고 유지 보수가 쉬운 코드를 작성하는 것이 좋습니다. 특히 서버의 시간보다 서버 시간이 더 중요하므로주의해야합니다. 밀리 초 또는 그 이하. 먼저 응용 프로그램의 성능을 살펴보고 괜찮 으면 끝났습니다. 시간을 갖고 할 수있는 다른 작업으로 이동하십시오. 속도가 느린 경우 - 측정하여 (간단한 시간 측정을 통해) 이 무엇인지 정확하게 찾아내서이 느린 경우에만 최적화하십시오. 일반적으로 느린 것은 많은 조인이 포함 된 테이블에서 큰 지저분한 선택이지만 이처럼 간단한 업데이트는 아닙니다. 또한 업데이트 (일반적으로)는 희귀하고 사용자 을 기다릴 수 있으므로 선택 최적화에 중점을 둡니다.

0

당신은 .. 무작위 ID를

0

이 내가 사용하는 것이 무엇인가에 큰 루프의 두 쿼리를 실행하려고 할 수 actualy이 난 내 mysql을 업데이트해야 할 때 내가 사용하는 데는 보통 것입니다. 당신은 정말이 둘을 비교하려면

"UPDATE tbl_name SET enabled = 1 WHERE ID = " . $IDs; 

하지만 ... 난 당신이 그들에게 t 100 id`s의 성능은 동일합니다 생각 ID s o proccess and then you will know which one is the best.. for a single id the preformance is the same.. but i don을 많이주는 것이 좋습니다. 그 결과를 알려주세요. 감사합니다. 감사합니다.

+0

(100 IDS) 위의 쿼리를 100 개의 ID에 대해 100 번 실행하지 않는 한 IN 버전을 사용하는 것 외에는 선택의 여지가 없습니다. 분명히 그것은 현명하지 않을 것입니다. – Evernoob

1

CPU주기를 절약하고 성능을 향상 시키려면 IN을 사용하십시오. 이런 식으로 생각해라. 당신은 ur 이웃 집에 10의 항목을 가져 가야한다. .. 그것은 더 빠를 것이다? 동시에 10 개 모두를 가져 가거나 하나씩 해보십시오. 밀리 초가 인스턴스의 수와 곱해 지더라도 그것이 중요해질지라도.

mysql에 하나의 쿼리를 보낼 때 백그라운드에서 일어날 일을 상상해보십시오. mysql 엔진은 모든 쿼리를 컴파일 한 다음 처리해야하며, PHP가 네트워크를 통해 UR 쿼리를 보내야하는 부분을 잊어 버릴 필요가 없습니다. mysql.

그래서 u가 하나의 쿼리 대신 10 개의 쿼리를 보내는 경우 처리 시간이 늘어납니다. 이것이 바로 "Views"가 표준 select 문보다 빠르기 때문입니다.

관련 문제