>  기사  >  데이터 베이스  >  느리고 시간이 오래 걸리는 mysql left Join 쿼리의 문제점을 요약하고 정리합니다.

느리고 시간이 오래 걸리는 mysql left Join 쿼리의 문제점을 요약하고 정리합니다.

WBOY
WBOY앞으로
2022-10-04 08:00:272901검색

이 기사에서는 mysql에 대한 관련 지식을 제공합니다. SELECT 문을 분석하는 EXPLAIN 명령을 포함하여 느리고 시간이 오래 걸리는 왼쪽 조인 쿼리의 함정을 주로 소개합니다. 모두에게 도움이 됩니다.

느리고 시간이 오래 걸리는 mysql left Join 쿼리의 문제점을 요약하고 정리합니다.

추천 학습: mysql 비디오 튜토리얼

문제 배경

두 개의 테이블, 하나는 사용자 테이블 a(기본 키는 int 유형)이고 다른 하나는 사용자 특정 정보 테이블 b(사용자 테이블 ID)입니다. 필드는 varchar 유형입니다).

사용자 및 사용자 정보를 표시하고 싶기 때문에 관련 질의가 필요하지만, Left Join 이후 질의가 너무 느리고 시간이 오래 걸리는 것으로 나타났습니다. 사용자 테이블 데이터는 약 20,000개입니다.

문제 분석 및 처리

1. EXPLAIN 명령은 SELECT 문을 분석합니다

유형 필드는 쿼리가 효율적인지 판단하는 중요한 기반을 제공합니다.

ALL: 전체 테이블 스캔을 나타냅니다. 이 유형의 쿼리는 성능이 가장 나쁜 쿼리 중 하나입니다.

일반적으로 우리 쿼리에는 ALL 유형 쿼리가 있어서는 안 됩니다. 데이터의 양이 많으면 데이터베이스 성능에 큰 재앙이 됩니다. 일반적으로 쿼리가 ALL 유형 쿼리인 경우 해당 필드에 인덱스를 추가하면 이를 방지할 수 있습니다.

2 . 새로운 인덱스

디스커버리 테이블 b 필드는 이전에 인덱스가 생성되지 않았기 때문입니다.

alter table a add index idx_mbrID (mbrID);

분석을 다시 설명해보세요

유형이 ref로 변경된 것을 확인합니다. 다양한 유형 유형(

ALL < index < range ~ index_merge < ref < eq_ref < const < system

)의 성능 관계를 기반으로 비교 후 OK라고 느껴지므로 쿼리가 실행됩니다.

3. 인덱스 필드 유형을 일관성 있게 수정

쿼리를 실행한 후 실행 속도가 최적화되지 않은 것을 발견했습니다. 이전 동료가 디자인한 테이블을 주의 깊게 살펴보니 인덱스 유형 필드가 있습니다. 일관성이 없어서 varchar에서 int로 변경하고 다시 쿼리하여 쿼리 속도가 크게 향상되었습니다.

자바 코드에 작성한 문자열이 데이터베이스에서 int로 변경되어도 현재 테스트는 정상적으로 사용 가능합니다

요약

문제를 해결한 후 개발 매뉴얼을 열어보니 인덱스 사양이 나와 있는 것을 확인했습니다. 조인 중에 데이터 유형이 일관되도록 명확하게 강제하려면 관련 필드에 인덱스가 있어야 합니다! ! !

추천 학습: mysql 비디오 튜토리얼

위 내용은 느리고 시간이 오래 걸리는 mysql left Join 쿼리의 문제점을 요약하고 정리합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제