나는이 MySQL의에서 다음과 같은 기능호출 MySQL의 기능은 명령 프롬프트에서 혼자 함수를 호출보다 훨씬 더 많은 시간이 소요
CREATE FUNCTION `get_project_uuid`(project_kee varchar(400)) RETURNS varchar(50) CHARSET utf8
BEGIN
declare v_project_uuid varchar(50);
select project_uuid into v_project_uuid from projects where scope='PRJ' and kee=project_kee;
RETURN v_project_uuid;
END
내가 MySQL의 명령 프롬프트에서이 함수를 직접 실행을 몇 밀리 초 만에 실행되지만 다른 select 문에서이 함수를 사용할 때 해당 hosing select 문을 실행하는 데 2-3 분 정도 걸립니다. 나는 함수에서 select 문을 가지고 호스팅 select 문이 아닌 함수 호출에 직접 사용하는 경우
select * from issues where project_uuid = get_project_uuid('Project1')
는 그러나, 몇 밀리 초 단위로 작동합니다.
select * from issues where project_uuid = (
select project_uuid from projects
where scope='PRJ' and kee='Project1'
)
이 기능을 사용하는 것이 너무 오래 걸리는 경우가 많습니다. 이제는 더 긴 시간 때문에이 기능을 사용하지 않아야합니다. 내가 놓친 게 있니?
선택을 수행하는 대신 하드 코딩 된 값을 반환하는 더미 함수를 작성 하시겠습니까? 그것은 절차 자체의 구성에 잘못된 것이 있는지 알려줄 것입니다. – blackpen
'BEGIN '앞에 키워드'DETERMINISTIC'을 추가하십시오. 그것은 한 번만 계산하도록 mysql에게 알려줄 것이다. – Solarflare
@blackpen : 귀하의 질문을 정확하게 이해했는지 확신 할 수 없습니다. 사람이 읽을 수있는 데이터 즉 프로젝트 이름을 제공하고 그 대가로 동일한 프로젝트를 나타내는 오랫동안 읽을 수없는 고유 키를 얻습니다. 중요한이 읽을 수없는 고유 키는 다른 테이블의 외래 키로 사용되므로 읽을 수있는 프로젝트 이름을 제공하여이 고유 키 (이 경우 uuid)를 가져 오는 함수를 작성하는 것이 편리합니다. – brunns