MySQL이 뷰 쿼리에 인덱스를 사용할 수 없는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-11 04:05:02
원래의
592명이 탐색했습니다.

Why Can't MySQL Use Indexes for View Queries?

MySQL은 뷰 쿼리에 인덱스를 사용할 수 없나요?

뷰의 효율성에 대한 의구심에도 불구하고 직면하는 문제는 옵티마이저가 조건자를 뷰 쿼리에 푸시할 수 없습니다.

MySQL은 뷰 쿼리를 별도로 실행합니다. 외부 쿼리를 실행하기 전에 중간 "파생"(MyISAM) 테이블에서 결과를 구체화합니다. 이 프로세스는 보기 쿼리 실행 중 외부 쿼리의 조건자 고려를 건너뜁니다.

성능 문제 해결

보기 쿼리의 성능을 향상하려면 색인 구조:

표지 만들기 인덱스:

뷰 쿼리에서 참조된 모든 열을 포함하는 "포함" 인덱스를 정의합니다. 이 경우 다음 인덱스를 생성하십시오.

ON highscores (player, happened_in, score)
로그인 후 복사

이 인덱스를 사용하면 MySQL이 "인덱스 사용"을 사용하여 뷰 쿼리에 액세스할 수 있으며 비용이 많이 드는 "파일 정렬 사용"을 피할 수 있습니다.

독립형 쿼리 평가:

뷰 쿼리의 실행 계획을 독립형 쿼리와 비교합니다. 비슷한 목적으로 사용됩니다:

SELECT player
     , MAX(score) AS highest_score
     , happened_in
 FROM highscores
WHERE player = 24
  AND happened_in = 2006
GROUP
   BY player
    , happened_in
로그인 후 복사

이 독립 실행형 쿼리는 포함 인덱스를 활용할 수도 있지만 중간 테이블을 구체화하는 오버헤드를 제거합니다.

결론:

MySQL에서 뷰 쿼리를 최적화하는 열쇠는 최적화 프로그램이 활용할 수 있는 적절한 인덱스를 설계하는 데 있습니다. 뷰 쿼리는 기본적으로 외부 쿼리에서 참조되기 전에 구체화되는 별도의 쿼리입니다. MySQL에서 뷰를 사용할 때 발생할 수 있는 성능 저하를 피하려면 이 동작을 이해하는 것이 중요합니다.

위 내용은 MySQL이 뷰 쿼리에 인덱스를 사용할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿