2011-10-27 6 views
29

우리는 프로젝트에서 코드 및 쿼리의 복잡성을 줄이기 위해 뷰를 사용하기 시작했습니다. 일부는 몇 가지 조인이 있으며, 이해할 경우 MySQL보기를 통해 참조 할 수 있습니다 그 데이터를 여러 곳에서 좀 더 쉽게 사용할 수 있습니다.MySQL보기 및 색인 사용

"MySQL은 뷰에 인덱스를 사용하지 않습니다", "인덱싱 된 뷰를 가질 수 없습니다", "MERGE를 사용할 경우에만 ..." - 컷 대답.

따라서 체이스를 자르려면 MySQL 뷰는 빌드 된 테이블에서 인덱스 을 사용합니까?? 성능이 떨어지거나 조인 할 때 기본 테이블의 인덱스를 사용하기 때문에 뷰를 사용하는 것은 좋지 않은 생각입니까? 테이블에서 인덱싱 된 열을 기준으로 뷰를 정렬하는 경우에도 일반적으로 그렇게 빨리 정렬됩니까?

내 연구를 수행하면보기가 색인을 사용하지 않는다는 것을 나타내는 것으로 보이지만 그럴 경우 아무도 색인을 사용하지 않는다는 것을 나타냅니다. 분명히 사람들이 그러니까 ...?

죄송합니다.

+0

참조 http://stackoverflow.com/q/244226/632951 – Pacerier

답변

29

뷰를 쿼리하는 경우 MySQL 에 기본 테이블의 인덱스 사용을 고려합니다.

그러나 이 아닌보기에서 계산 된 열에 새 색인을 추가 할 수 있습니다. 나는 사람들이 MySQL이 인덱싱 된 뷰를 갖지 않는 것을 의미한다고 생각한다. (예를 들어) SQL Server's indexed views.

+0

나는 그것이 사실이라고 믿기 시작했지만, 무엇인가를하기 전에 확실히 확신하고 싶었습니다. 엄청 고마워. – Xkeeper

15

MySQL 뷰는 내장 된 테이블에서 인덱스를 사용합니까?

예.

명 아마 그들이 MySQL doesn't use indexes for views은 일반 테이블이 될 것 같은 실제 뷰가 물리적으로 파일 시스템에 저장되어있는 materialized views 또는 indexed views라는 뭔가 말할 때 참조 무엇. Oracle이나 SQL Server와 같은 일부 DBMS에서 이러한 뷰에 대한 인덱스를 생성 할 수 있습니다. 본질적으로 indexed views은 원래 테이블의 사본이되고 kept in sync automatically, 일종의 말입니다.

예를 들어, SQL Server에서 Indexed Views과 관련된이 기사를 읽으십시오.

+0

알 겠어 ... 두 답을 모두 받아 들일 수 있으면 좋겠다. 그 메모에서 INSERT/UPDATE 기반 트리거가 뷰 (아마도?)에 기반한 테이블을 생성함으로써 해결 방법을 푸싱 할 수있는 것처럼 보이지만, 이는 외부에서 쓸모 없게되는 성능과 같은 것입니다. 보관 된 데이터베이스. – Xkeeper