많은 조인을 사용하는 복잡한 쿼리가 있습니다 (사실 8 개). 나는 그것을보기로 단순화 할 생각을하고있었습니다. 약간의 연구 끝에 나는 단순함과 보안면에서 이점을 볼 수 있습니다. 그러나 나는 어떤 속도의 언급도 보지 못했다.MySQL보기가 일반 쿼리보다 빠릅니까?
조회수가 미리 컴파일 된 준비된 명령문처럼 작동합니까? 뷰를 사용하여 성능이 현저히 향상 되었습니까?
많은 조인을 사용하는 복잡한 쿼리가 있습니다 (사실 8 개). 나는 그것을보기로 단순화 할 생각을하고있었습니다. 약간의 연구 끝에 나는 단순함과 보안면에서 이점을 볼 수 있습니다. 그러나 나는 어떤 속도의 언급도 보지 못했다.MySQL보기가 일반 쿼리보다 빠릅니까?
조회수가 미리 컴파일 된 준비된 명령문처럼 작동합니까? 뷰를 사용하여 성능이 현저히 향상 되었습니까?
아니요,보기는 단순히 저장된 텍스트 쿼리입니다. WHERE
및 ORDER
을 적용하면 실행 계획이 고려 된 해당 절로 계산됩니다.
이것은 사실이 아닙니다. 뷰 알고리즘에 대해 병합을 선택하면 근본적으로 올바르지 만, 유혹을 선택하면이 알고리즘이 실현됩니다. Undefined (기본값은 지정되지 않은 경우)로 MySQL이 선택할 수 있으며 예상치 못한 일을 할 수 있습니다. – Ray
나는 MySQL 전문가는 아니지만, 결과가 요청 될 때 MySQL이 뷰를 처리하는 방법을 제어하고 뷰가 저장되는 방법에 아무런 영향을 미치지 않는다는 것을 TempTable 알고리즘이 제어한다고 확신한다. –
네, 마치 임시 쿼리 인 것처럼 실행되는 텍스트 조각과 완전히 다릅니다. – Ray
가끔 도움이 될 수 있지만 은색 총알이 아닙니다. 뷰 헬프 성능을 보았지만 상처를 보았습니다. 뷰는 materialization을 강제 할 수 있는데, 이는 MySQL이 당신을 위해 좋은 것을 선택하지 않을 때 더 나은 접근 경로를 얻을 수있다.
뷰의 기본적으로 저장된 하위 쿼리입니다. 뷰를 제외한
SELECT *
FROM someview
및
SELECT *
FROM (
SELECT somestuff
FROM underlying table
);
는 기본 쿼리 당신이 어떤 데이터로 작업 할 때마다를 작성하지 않는 한, 좀 더 휴대용 것 : 사이의 차이는 기본적으로 없습니다 그것은 돌아온다.
일부 데이터베이스는 미리 컴파일 할 것이지만 MySQL이 그렇게 할 것이라고는 생각하지 않습니다. 이 질문을 보길 원할 수 있습니다 : http://stackoverflow.com/questions/1021319/how-to-optimize-mysql-views –
답변과 반대 - 제 경험상 많은 조인이있는보기의 경우 직접 쿼리가 더 빨리 실행됩니다. –