집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 뷰는 성능 향상을 위해 인덱스 향상을 활용할 수 있습니까?
MySQL 뷰 사용은 해로운 습관입니까?
반대를 제안하는 조언에도 불구하고 뷰는 실제로 MySQL 내에서 사용될 때 인덱스 향상 기능을 활용할 수 있습니다. . 이러한 기능을 어떻게 구현하는지에 대한 의문이 생깁니다.
답: 적절한 인덱스 제공
해결책은 MySQL이 적극적으로 활용할 수 있는 인덱스를 제공하는 것입니다. 이 경우 다음과 같은 "포함" 인덱스가 가장 적합합니다.
CREATE INDEX highscores_IX3 ON highscores (player, happened_in, score)
이 인덱스가 있으면 MySQL의 최적화 프로그램은 SELECT 쿼리에 이를 사용할 수 있어야 하며 결과적으로 "인덱스 사용"이 발생합니다. " WHERE 플레이어 = 24 조건자에 귀속되는 선언.
그러나 MySQL은 finally_in 인덱스를 활용할 가능성이 없다는 점을 인정하는 것이 중요합니다. 외부 쿼리에서 내부 "뷰 쿼리" 실행을 분리하는 동작으로 인해 뷰 쿼리의 경우. 결과적으로, done_in에 정의된 인덱스는 쿼리 형성 단계에서 활용되지 않습니다.
커버링 인덱스를 통한 성능 최적화
뷰 쿼리 성능을 최적화하려면 "커버링" 쿼리에서 참조되는 모든 열(예: ON 최고 점수(플레이어, 발생_인, 점수))을 포함하는 "인덱스"를 사용하는 것이 좋습니다. 이 유형의 인덱스를 사용하면 기본 테이블에서 페이지를 조회할 필요 없이 인덱스 페이지에서 직접 데이터를 검색할 수 있으므로 "인덱스 사용" 액세스 방법이 사용됩니다.
파생 테이블이 없는 독립 실행형 쿼리와 비교
비교를 위해 뷰와 동일한 독립 실행형 쿼리를 고려하세요. 쿼리:
SELECT player, MAX(score) AS highest_score, happened_in FROM highscores WHERE player = 24 AND happened_in = 2006 GROUP BY player, happened_in
이 쿼리에 대한 포함 인덱스(예: ON highscores(player, luck_in, Score))도 활용할 수 있으므로 중간 "파생" 테이블이 필요하지 않습니다.
주의 및 고려사항
조회수가 본질적으로 그렇지는 않지만 해롭기 때문에 MySQL 프로세스가 쿼리를 보는 방식을 이해하는 것이 중요합니다. 이는 다른 데이터베이스에서 채택한 접근 방식과 다릅니다. 이러한 지식을 통해 개발자는 성능 문제를 완화하면서 뷰의 잠재력을 효과적으로 활용할 수 있습니다.
위 내용은 MySQL 뷰는 성능 향상을 위해 인덱스 향상을 활용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!