MySQL을 심도 깊게 배우고 싶다면 매크로 아키텍처부터 시작해야 합니다. 이번 글에서는 MySQL 쿼리문을 실행하는 과정을 배워보는 것이 모두에게 도움이 되기를 바랍니다.
이 기사의 MySQL 버전은 8.0.18
파서의 역할은 다음 작업을 수행하는 것입니다. 클라이언트:
의미론적 구문 분석, 구문 분석 트리의 의미가 올바른지, 테이블과 필드가 존재하는지 확인하는 것입니다. 전처리 후에 새로운 구문 분석 트리가 얻어집니다.
차이가 있습니다. 실행 방법은 쿼리 최적화 프로그램에 의해 결정됩니다. 예를 들면 다음과 같습니다.
쿼리 최적화 도구입니다. 비용 기반 최적화 프로그램 . 작동 원리는 구문 분석 트리를 기반으로 다양한 실행 방법에 필요한 비용(비용)을 평가하고 최소 비용으로 실행 계획을 얻는 것입니다. 최종 솔루션 .
그러나 오버헤드가 가장 적은 이 실행 방법이 반드시 최적의 실행 방법은 아닙니다. 예를 들어 인덱스를 사용해야 하는데 전체 테이블 스캔을 수행합니다. 쿼리 옵티마이저에는 "최적화"라는 두 단어가 있지만 이 최적화가 만능은 아닌 경우가 많으므로 SQL 문이 합리적으로 작성되었는지 여부를 고려하는 것이 더 필요합니다.SELECT * FROM t1 WHERE a1<10 AND ( EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND t2.b2=1) OR EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND t2.b2=2) );병합 후
SELECT * FROM t1 WHERE a1<10 AND ( EXISTS(SELECT a2 FROM t2 WHERE t2.a2<5 AND (t2.b2=1 OR t2.b2=2) );쿼리 조건을 병합하여 여러 하위 쿼리를 병합하고 여러 연결 작업을 단일 테이블 스캔 및 단일 연결로 줄입니다
SELECT * FROM USERINFO WHERE name LIKE 'Abc%';다시 쓰기 후
SELECT * FROM USERINFO WHERE name >= 'Abc' AND name < 'Abd';이것이 인덱스 범위 쿼리에 대한 답입니다
((a AND b) AND (c AND d))
는 a AND b AND c AND d
((a AND b) AND (c AND d))
简化为 a AND b AND c AND d
col1 = col2 AND col2 = 3
简化为 col1 = 3 AND col2 = 3
col1 = 1+2
简化为 col1 = 3
상수 전송, 예: col1 = col2 AND col2 = 3
은 col1 = 3 AND col2 = 3
col1 = 1+2
를 col1 = 3
으로 단순화주로 물리적 쿼리 최적화로 수행 작업은 비용을 평가하는 것입니다.
스캔 방법 | |
---|---|
순차 스캔 | |
인덱스 스캔 |
위 매개변수에 대한 설명은 다음과 같습니다.
이 문서를 참조하여 인덱스 비용을 계산할 수 있습니다. MySQL 쿼리가 이 인덱스를 사용하기로 선택한 이유는 무엇입니까? ——MySQL 8.0.22 인덱스 비용 계산 기준
실행 계획은 쿼리 최적화 프로그램의 산물이며 결국 실행을 위해 스토리지 엔진으로 넘겨지게 됩니다. 실행 계획은 MySQL이 이 SQL 문을 어떻게 실행할지 알 수 있도록 도와줍니다.
explain
키워드를 사용하면 SQL 문의 실행 계획을 확인할 수 있으며, 다음 정보를 얻을 수 있습니다.
MySQL 서버는 데이터 저장, 추출 및 업데이트 방법에 대한 사양을 규정합니다. 이 사양은 스토리지 엔진에 따라 구현 방법이 다르므로 스토리지 엔진도 다릅니다. 고유한 기능과 특성을 제시합니다. 가장 일반적으로 사용되는 스토리지 엔진은 InnoDB와 MyISAM입니다
이 두 스토리지 엔진의 특징에 대해 간략하게 이야기하겠습니다
InnoDB:
MyISAM
스토리지 엔진은 현재 확장되지 않습니다. 다른 기사에서는 계속해서 비교 내용을 삽입하고 InnoDB
전에는 클라이언트 소프트웨어에서 SQL 문을 작성하는 방법만 알았습니다. 실행하고 데이터를 가져옵니다
지금까지 저는 쿼리 문이 MySQL 서버에 전달된 후 이러한 일련의 작업을 거쳐야 한다는 것을 마침내 배웠습니다. 파서는 SQL 문의 구문과 어휘가 있는지 확인합니다. 오류가 없으면 키워드를 기준으로 조각으로 분할되고 마지막으로 구문 분석 트리가 형성됩니다
전처리기는 SQL 문의 의미를 확인하고 SQL 문이 모호한지, 필드가 있는지 등을 확인합니다. 존재하고 새로운 파싱 트리를 형성
쿼리 최적화 프로그램이 가져옵니다. 이 파싱 트리에서 생성된 다양한 실행 계획을 논리적 쿼리 최적화와 물리적 쿼리 최적화를 통해 얻어 최소한의 비용으로 실행 계획을 얻습니다
실행 엔진은 이 실행 계획을 가져오고 스토리지 엔진 인터페이스를 호출합니다
실행 계획을 기반으로 하는 스토리지 엔진은 데이터 쿼리를 수행하고 운영 체제에서 파일 시스템의 일부 인터페이스를 쿼리하고 호출하여 데이터 쿼리를 완료합니다. 그리고 마지막으로 클라이언트에게 반환합니다
[관련 권장 사항:
mysql 비디오 튜토리얼위 내용은 쿼리문 실행 과정에 대해 이야기하는 MySQL 학습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!