2011-01-25 1 views
23

많은 조인을 사용하는 복잡한 쿼리가 있습니다 (사실 8 개). 나는 그것을보기로 단순화 할 생각을하고있었습니다. 약간의 연구 끝에 나는 단순함과 보안면에서 이점을 볼 수 있습니다. 그러나 나는 어떤 속도의 언급도 보지 못했다.MySQL보기가 일반 쿼리보다 빠릅니까?

조회수가 미리 컴파일 된 준비된 명령문처럼 작동합니까? 뷰를 사용하여 성능이 현저히 향상 되었습니까?

+2

일부 데이터베이스는 미리 컴파일 할 것이지만 MySQL이 그렇게 할 것이라고는 생각하지 않습니다. 이 질문을 보길 원할 수 있습니다 : http://stackoverflow.com/questions/1021319/how-to-optimize-mysql-views –

+0

답변과 반대 - 제 경험상 많은 조인이있는보기의 경우 직접 쿼리가 더 빨리 실행됩니다. –

답변

13

아니요,보기는 단순히 저장된 텍스트 쿼리입니다. WHEREORDER을 적용하면 실행 계획이 고려 된 해당 절로 계산됩니다.

+4

이것은 사실이 아닙니다. 뷰 알고리즘에 대해 병합을 선택하면 근본적으로 올바르지 만, 유혹을 선택하면이 알고리즘이 실현됩니다. Undefined (기본값은 지정되지 않은 경우)로 MySQL이 선택할 수 있으며 예상치 못한 일을 할 수 있습니다. – Ray

+0

나는 MySQL 전문가는 아니지만, 결과가 요청 될 때 MySQL이 뷰를 처리하는 방법을 제어하고 뷰가 저장되는 방법에 아무런 영향을 미치지 않는다는 것을 TempTable 알고리즘이 제어한다고 확신한다. –

+0

네, 마치 임시 쿼리 인 것처럼 실행되는 텍스트 조각과 완전히 다릅니다. – Ray

0

가끔 도움이 될 수 있지만 은색 총알이 아닙니다. 뷰 헬프 성능을 보았지만 상처를 보았습니다. 뷰는 materialization을 강제 할 수 있는데, 이는 MySQL이 당신을 위해 좋은 것을 선택하지 않을 때 더 나은 접근 경로를 얻을 수있다.

+0

MySQL은 구체화 된 뷰를 지원하지 않습니다. 그래서 그것은 동등한 쿼리를 통해 성능을 도울 수있는 방법을 보지 못했습니다 ... – ircmaxell

+0

그들은 구체화 된 뷰라고 부르지 않지만 "유혹"은 이름이 암시하는 것처럼 대략적으로 나타나는 뷰 알고리즘 중 하나입니다 – Ray

+1

제가 보았습니다 이것과 유혹스러운 알고리즘은 구체화 된 뷰의 버전이 아니다. 지금까지 MySQL에서 (테이블에 수동으로 뷰를 주기적으로 투영하지 않는 한) 구체화 된 뷰 또는 미리 해결 된 뷰의 형태는 지원되지 않습니다. –

0

뷰의 기본적으로 저장된 하위 쿼리입니다. 뷰를 제외한

SELECT * 
FROM someview 

SELECT * 
FROM (
    SELECT somestuff 
    FROM underlying table 
); 

는 기본 쿼리 당신이 어떤 데이터로 작업 할 때마다를 작성하지 않는 한, 좀 더 휴대용 것 : 사이의 차이는 기본적으로 없습니다 그것은 돌아온다.

+1

그리고 MySql이 유혹 할 수있는 뷰 알고리즘을 선택하면 어떻게 될까요? – Ray

+2

나는 완전히 반대한다. MySQL VIEW는 저장된 쿼리 문자열에 대한 별칭이 아닙니다.올바르게 사용하거나 사용하지 않으면 큰 성과를 얻을 수 있습니다. 자세한 내용은 내 대답을 참조하십시오. – Juan

관련 문제