2009-10-16 8 views
1

를 사용하지 않는 저장 프로 시저 난 그냥 SQL 문 사용을 선택 문이 그MySQL은 - 쿼리 캐시

후 처음과 0.0003s을 실행하는 0.4784s 소요

저장 프로 시저에 SQL SELECT 문을 변환 한

저장 프로 시저를 실행할 때마다 0.4784 초가 필요합니다.

쿼리 캐시를 사용하지 않았다고 가정합니다.

어떻게 수정합니까?

코드의 단순화 된 버전

SELECT * FROM Venues WHERE VenueName = :TheVenue 

=======

CREATE PROCEDURE GetVenues 
(
    TheVenue VarChar(22) 
) 
BEGIN 
    SELECT * FROM Venues WHERE VenueName = TheVenue 
END; 

답변

2

MySQL에 오신 것을 환영합니다. 스토어드 프로 시저 내에서 쿼리 캐시를 활용하는 것이 무엇보다 어렵습니다. dev 기사 인 A Practical Look at the MySQL Query Cache에서 이에 대해 자세히 설명합니다. 제한 사항은 참조 설명서 hereMySQL Performance Blog에도 언급되어 있습니다.

기본적으로 저장 프로 시저 내에서 실행되는 쿼리의 캐싱에 의존하지 마십시오. the first reference은 가능하다고 주장하고 있지만, 작동 시키려면 거의 불가능합니다. 저장 프로 시저를 사용하여 복잡한 논리를 캡슐화하는 경우 일반적으로 문제가되지 않습니다. 필자가 보았던 대부분의 문제는 VIEW이 만족할만한 매우 간단한 쿼리에 대해 저장 프로 시저를 사용하여 발생했습니다.

2

당신은 같은 동적 SQL 저장 프로 시저를 시도 할 수 :

CREATE PROCEDURE GetVenues (TheVenue varchar(22)) 
BEGIN 
SET @s = 'SELECT * FROM Venues WHERE VenueName = ?'; 
SET @v = TheVenue; 
PREPARE stmt1 FROM @s; 
EXECUTE stmt1 USING @v; 
DEALLOCATE PREPARE stmt1; 
END; 

없음 구문을 테스트하기 위해 손으로 MySQL 서버를 조정해야 할 수도 있습니다.