2010-03-23 9 views
0

나는 레코드를 추출해야하는 간단한 테이블을 가지고 있습니다.MySQL의 최적화 문장

SELECT *, slow_sp(row) FROM table WHERE slow_sp(row)>0 ORDER BY dist DESC LIMIT 10 

먼저이 같은 최적화에 생각 :

SELECT *, slow_sp(row) AS value FROM table WHERE value>0 ORDER BY dist DESC LIMIT 10 
문제는 평가 기능은 매우 시간이 많이 소요되는 저장 프로 시저 그래서이 문장에서와 같이 두 번 전화를 안 때문이다

하지만 WHERE 절이 평가 될 때 "값"이 처리되지 않아 작동하지 않습니다.

이 문장을 최적화 하시겠습니까? 감사.

답변

2

slow_sp의 기능은 무엇입니까? 쿼리를 최적화하려면 dist에 인덱스를 추가해야합니다.

두 번째 쿼리를 사용하려면 WHERE 대신 HAVING을 사용하십시오.

+0

slow_sp는 텍스트 코퍼스에서 단어의 "중요도"에 따라 0에서 100 사이의 값을 반환합니다. 기본적으로 미리 계산 된 값의 배열에 액세스하여 int 값을 결정합니다. 나는 HAVING 값을 시도 할 것입니다. 감사. – Ivan

+0

그것은 MySQL 기능입니다. 기본적으로 where 문에 포함하는 모든 열에 인덱스를 추가하십시오. 문제의 함수에서 쿼리를 보지 않고는 더 이상 도움을 줄 수 없습니다. – raveren

+0

괜찮습니다. 나는 HAVING 조항을 잊어 버릴 수 있습니다. 이제 효과가 있습니다. 감사! – Ivan