>데이터 베이스 >MySQL 튜토리얼 >메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

Java后端技术全栈
Java后端技术全栈앞으로
2023-08-24 15:38:351019검색


Story

계속 말씀드리자면, 저는 상하이 메이투안에서 인터뷰를 하러 갔었는데, 당시에도 답변이 너무 안 좋았습니다. 나쁘다든지 좋다든지 하는 것은 면접관에게 기분 좋은 느낌을 주지 않았을 뿐입니다.

안타깝네요. 평소에는 괜찮았는데, 면접 시간이 되면 아무 생각도 나지 않아요.


저는 Java开发快五年了(2017年),用过Oracle数据库(银行里的系统),但大多数时候都是使用MySQL데이터베이스 작업을 하고 있지만 이 질문을 받았을 때 여전히 혼란스러웠습니다. (저는 약간의 대화를 나누었습니다.) 면접관이 인덱싱, 느린 쿼리, 성능 최적화에 대해 질문할 것이라고 생각했습니다. (왜냐하면 이것들은 모두 제가 온라인에서 찾아 외운 면접 질문들이기 때문입니다.)

메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

오늘은 MySQL의 아키텍처 시스템이지만 Java 개발자이지만 일상적인 개발 프로세스에서 MySQL 데이터베이스를 다루는 경우가 많습니다. 회사에 );font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">DBA가 있는 경우 많은 작업을 수행하지만 DBA또는DBA는 다음과 같습니다. 소용없어, 우린 여전히 아주 이해가 필요해 rgba(27, 31, 35, 0.05 );font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">MySQL 의 전체 시스템, 게다가 인터뷰 중에 그를 만나는 것도 플러스입니다. MySQL的架构体系,尽管咱们是Java开发人员,但是在日常开发过程中也会经常和MySQL数据库打交道。如果公司有DBA能干点事还稍微好点,如果是没有DBA或者DBA没什么用的情况下,我们还是很有必要了解MySQL的整个体系的,况且在面试中遇到了也是一个加分项。

메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

想要知道一条SQL是怎么查询的,只要对MySQL整个体系搞清楚了,才能说出个123。

메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

所以于情于理,我们很有必要学习一下MySQL的架构体系的。

平时,我和小伙伴们聊天的时候,经常会把MySQL

메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

🎜뭔가 알고 싶어요SQL 쿼리 방법MySQL전체 시스템을 이해할 때만 123이라고 말할 수 있습니다. 🎜

메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.🎜🎜그래서 우리는 감정과 이성에 대해 배우는 것이 필요합니다MySQL의 아키텍처. 🎜🎜보통 친구들과 채팅할 때 MySQL은 우리가 개발하는 소프트웨어 시스템이기 때문에 아키텍처 다이어그램이 있고, 아키텍처가 어떻게 계층화되어 있는지, 각 계층의 기능은 무엇인지가 있습니다. 🎜

MySQL이란 무엇인가요?

  • MySQL은 스웨덴에서 개발한 관계형 데이터베이스 관리 시스템, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96 );">MySQL AB code>회사에서 개발했으며 현재 오라클회사 .
  • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。
  • MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
  • MySQL是开源的,所以你不需要支付额外的费用。
  • MySQL支持大型的数据库,可以处理拥有上千万条记录的大型数据库。
  • MySQL使用标准的SQL数据语言形式。
  • MySQL可以允许于多个系统上,并且支持多种语言,这些编程语言包括C、C++、Python、Java、Ped、PHP、Eifel、Ruby和TCL等。
  • MySQL🎜MySQL Code>는 모든 데이터를 하나의 큰 창고에 보관하는 것이 아닌 여러 테이블에 데이터를 저장하여 속도를 높이고 유연성을 향상시키는 관계형 데이터베이스 관리 시스템입니다.
  • 🎜🎜MySQL 코드>는 오픈소스이므로 추가 비용을 지불할 필요가 없습니다. 🎜🎜<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba( 27, 31, 35, 0.05);글꼴군: " operator mono consolas monaco menlo monospace break-all rgb>MySQL code>는 대규모 데이터베이스를 지원하며 수천만 개의 레코드가 포함된 대규모 데이터베이스를 처리할 수 있습니다. 🎜🎜<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba( 27, 31, 35, 0.05);글꼴군: " operator mono consolas monaco menlo monospace break-all rgb>MySQL code>표준 SQL 데이터 언어 형식을 사용합니다. 🎜🎜<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba( 27, 31, 35, 0.05);글꼴군: " operator mono consolas monaco menlo monospace break-all rgb>MySQL code>는 여러 시스템에서 사용할 수 있으며 이러한 프로그래밍 언어에는 C, C++, Python, Java, Ped, PHP, Eifel, Ruby 및 TCL 등이 포함됩니다. 🎜🎜<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba( 27, 31, 35, 0.05);글꼴 계열: " operator mono consolas monaco menlo monospace break-all rgb>MySQL code>는 현재 가장 널리 사용되는 웹 개발 언어인 PHP를 잘 지원합니다.<li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"><code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba(27, 31, 35, 0.05);font-family: " operator mono consolas monaco menlo monospace break-all rgb>MySQL은 대규모 데이터베이스를 지원합니다. 5천만 레코드의 데이터 웨어하우스를 지원합니다. 32비트 시스템 테이블 파일은 최대 4GB를 지원하고, 64비트 시스템은 최대 8TB를 지원합니다. MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
  • MySQL是可以定制的,采用了GPL协议,你可以修改源码来开发自己的MySQL系统。
  • 请注意MySQL拼写,另外,很多人可能有疑问,为什么MySQL的logo是一条海豚?

    下面我们就来看看MySQL的整体架构图。

    MySQL架构图

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    再来看看我们开发的系统架构图:

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    其实还是蛮相似的,都有分层的概念。既然我们开发的软件系统能进行分层,那么MySQL

    🎜🎜MySQL 사용자 정의 가능 , GPL 라이센스를 사용하면 소스 코드를 수정하여 자신만의 MySQL시스템. 🎜🎜

    참고MySQL 철자법에 대해 많은 사람들이 질문할 수 있습니다. ="글꼴 크기: 14px; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 배경 색상: rgba(27, 31, 35, 0.05); 글꼴 계열: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">MySQL

    의 로고는 돌고래인가요? 🎜

    MySQL

    전체 아키텍처 다이어그램. 🎜

    MySQL 아키텍처 다이어그램

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    우리가 개발한 시스템 아키텍처 다이어그램을 살펴보겠습니다. 🎜

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    사실 꽤 비슷합니다. 레이어링의 개념. 우리가 개발하는 소프트웨어 시스템은 계층화될 수 있으므로 MySQL 겹쳐질 수 있나요? 🎜<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">답은 다음과 같습니다. 예, 아래에서 이에 대해 이야기해 보겠습니다.<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba(27, 31, 35, 0.05); 글꼴 계열: " operator mono consolas monaco menlo monospace break-all rgb>MySQL 레이어링 상황과 각 레이어의 기능. MySQL的分层情况以及每一层的功能。

    架构图分层

    上面的架构图我们可以对其进行拆分,并做简要的说明。

    连接层

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    与客户端打交道,上面已经写明了能支持的的语言。客户端的链接支持的协议很多,比如我们在 Java 开发中的 JDBC

    这一层是不是有点像我们项目中的网关层?如果对网关不熟悉,那我们可以理解我controller

    아키텍처 다이어그램 레이어링 위의 아키텍처 다이어그램을 분할하여 간략하게 설명할 수 있습니다.

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.연결 레이어

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    고객과 함께 터미널을 다루기 위해 지원되는 언어가 위에 명시되어 있습니다. 클라이언트 링크에서 지원되는 프로토콜은 다양합니다. 예를 들어 (27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color : rgb(239, 112, 96);">Java 개발 중JDBC. 이 레이어는 우리 프로젝트의 레이어와 약간 비슷하지 않나요? : rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break -all;color: rgb(239, 112, 96);"> 게이트웨이 레이어

    ? 게이트웨이에 익숙하지 않으시다면 저를 이해하시면 됩니다. 컨트롤러레이어. <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;"></p>🎜서비스 레이어🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜이 레이어는 비즈니스 시스템의 서비스 레이어와 동일하며 관련 비즈니스 운영, 코드 최적화, 캐싱 등이 모두 포함되어 있습니다. 🎜🎜🎜🎜Connection pool🎜🎜🎜🎜은 주로 클라이언트와 데이터베이스 사이의 연결을 저장하고 관리하는 역할을 담당하며, 하나의 스레드가 하나의 연결을 관리하는 역할을 담당합니다. 연결 풀이 도입된 이후 공식 보고에 따르면 데이터베이스 연결 수가 128개에 도달하면 연결 풀을 사용할 때와 연결 풀을 사용하지 않을 때의 성능이 n배 향상됩니다(어쨌든 성능이 크게 향상됩니다). 🎜<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">연결이 설정된 후 select 문을 실행할 수 있습니다. 실행 로직은 먼저 캐시 모듈로 전달됩니다. </p> <h3 data-tool="mdnice编辑器" style="margin-top: 30px;margin-bottom: 15px;font-weight: bold;font-size: 20px;"> <span style="display: none;"></span>Cache<span style="display: none;"></span> </h3> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">MySQL은 쿼리 요청을 받은 후 먼저 쿼리 캐시로 이동하여 이 문이 이전에 실행되었는지 확인합니다. 이전에 실행된 명령문과 그 결과는 키-값 쌍의 형태로 메모리에 저장됩니다. 키는 쿼리문이고, 값은 쿼리 결과입니다. 쿼리가 이 캐시(적중)에서 직접 키를 찾을 수 있으면 값이 클라이언트에 직접 반환됩니다. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">캐시에 누락이 있는 경우 후속 실행 단계가 계속됩니다. 실행이 완료된 후 실행 결과는 쿼리 캐시에 저장됩니다. 여기서 볼 수 있듯이, 쿼리가 캐시에 도달하면 MySQL은 후속 복잡한 작업을 수행하지 않고 결과를 직접 반환할 수 있으므로 매우 효율적입니다. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">하지만 대부분의 경우 쿼리 캐싱을 사용하지 않는 것이 좋습니다. 이유는 무엇입니까? 쿼리 캐싱은 종종 득보다 실이 더 많기 때문입니다. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">쿼리 캐시가 매우 자주 실패합니다. 테이블의 특정 데이터가 업데이트되면 이 테이블의 모든 쿼리 캐시가 지워집니다. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">그래서 결과를 저장하는 데 어려움이 있을 수 있지만 사용하기 전에는 업데이트를 통해 삭제됩니다. 업데이트 압력이 심한 데이터베이스의 경우 쿼리 캐시 적중률이 매우 낮습니다. 귀하의 비즈니스에 오랫동안 한 번만 업데이트되는 정적 테이블이 없다면 말이죠. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">예를 들어 시스템 구성 테이블인 경우 이 테이블의 쿼리는 쿼리 캐시에 적합합니다. </p> <p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;margin-top: 1px;margin-bottom: 1px;">다행히 <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba(27, 31, 35, 0.05 );font-family: " operator mono consolas monaco menlo monospace break-all rgb>MySQL도 이 A "를 제공합니다. 필요에 따라 사용" 접근 방식을 사용합니다. query_cache_type이 다음으로 설정되었습니다. DEMAND, 따라서 기본 SQL 문은 다음과 같습니다. 쿼리 캐시는 사용되지 않습니다. MySQL也提供了这种“按需使用”的方式。你可以将参数query_cache_type设置成DEMAND,这样对于默认的SQL语句都不使用查询缓存。

    「注意」MySQL 8.0

    "참고": MySQL 8.0 버전에서는 전체 쿼리 캐시 기능을 직접 삭제하는데, 이는 MySQL 8.0에서 캐시 기능이 완전히 제거되었음을 나타냅니다.

    Parser

    쿼리 캐시에 적중되지 않으면 실제 명령문 실행이 시작됩니다. 먼저 MySQL은 사용자가 수행하려는 작업이 무엇인지 알아야 하므로 SQL 문을 구문 분석해야 합니다.

    분석기는 먼저 "어휘 분석"을 수행합니다. 입력한 내용은 여러 문자열과 공백으로 구성된 SQL 문입니다. MySQL은 그 안에 있는 문자열이 무엇인지, 무엇을 나타내는지 식별해야 합니다. 🎜

    어휘분석을 마친 후에는 "문법분석"을 해야 합니다. 구문 분석기는 어휘 분석 결과를 바탕으로 입력한 SQL 문이 문법 규칙에 따라 MySQL 구문을 만족하는지 여부를 판단합니다.

    SQL 철자를 놓치거나 잘못된 문자를 쓰면 "You have an error in your SQL syntax"라는 오류 알림을 받게 됩니다.

    예를 들어,

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    WHERE 키워드에 E가 누락되어 오류가 발생합니다.

    마찬가지로 필드가 존재하지 않으면 SQL을 사용합니다.

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    일반적으로 문법 오류는 오류가 발생한 첫 번째 위치를 묻는 메시지를 표시하므로 "근처에서 사용" 바로 다음 내용에 주의해야 합니다. 이는 참고용일 뿐입니다. .

    분석기로 SQL을 분석했는데 오류가 보고되지 않았습니다. 그런 다음 이때 최적화 프로그램에 들어가 SQL을 최적화합니다.

    Optimizer

    옵티마이저는 데이터베이스 테이블에 여러 인덱스가 있거나 명령문에 여러 테이블 연결(조인)이 있는 경우 사용할 인덱스를 결정하는 데 주로 사용됩니다. 각 테이블의 조인 순서를 결정합니다.

    예:

    SELECT a.id, b.id FROM t_user a join t_user_detail b WHERE a.id=b.user_id and a.user_name=&#39;田维常&#39; and b.id=10001

    조건부 쿼리를 최적화합니다.

    옵티마이저 처리가 완료되면 SQL 실행 계획이 결정됩니다. 그런 다음 계속해서 액츄에이터로 들어갑니다.

    Executor

    우선 권한, 즉 이 SQL을 실행할 수 있는 권한이 있는지 확인해야 합니다. 작업 중에 일부 클라이언트에 대한 권한이 제어될 수 있습니다.

    예: 프로덕션 환경에서 대부분의 개발자는 쿼리 권한만 있고 추가, 삭제 또는 수정 권한은 없습니다(일부 소규모 회사 제외).

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    권한이 있으면 테이블을 열고 실행을 계속하세요. 테이블이 열리면 실행기는 테이블의 엔진 정의에 따라 엔진이 제공하는 인터페이스를 사용합니다.

    스토리지 엔진 레이어

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    이 레이어는 비즈니스 시스템의 지속성 레이어로 이해될 수 있습니다.

    스토리지 엔진 개념은 MySQL에만 있습니다. 모든 관계형 데이터베이스에 스토리지 엔진 개념이 있는 것은 아닙니다.

    데이터베이스 저장 엔진은 데이터베이스의 기본 소프트웨어 구성입니다. 데이터베이스 관리 시스템(DBMS)은 데이터 엔진을 사용하여 데이터를 생성, 쿼리, 업데이트 및 삭제합니다. 다양한 스토리지 엔진은 다양한 스토리지 메커니즘, 인덱싱 기술, 잠금 수준 및 기타 기능을 제공하며, 다양한 스토리지 엔진을 사용하면 특정 기능을 얻을 수도 있습니다. 오늘날 다양한 데이터베이스 관리 시스템은 다양한 데이터 엔진을 지원합니다.

    관계형 데이터베이스에서는 데이터가 테이블 형태로 저장되기 때문에 스토리지 엔진도 테이블 타입(Table Type, 즉 이 테이블의 저장 유형과 동작 유형)이라고 할 수 있습니다.

    • MySQL 버전 5.5(mysql 버전
    • MySQL 버전 5.5(mysql 버전 >= 버전 5.5) 이상에서는 기본 스토리지 엔진이 InnoDB입니다.

    다음은 비교적 일반적으로 사용되는 일부 엔진을 비교한 것입니다.

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    실제 프로젝트에서는 대부분 InnoDB를 사용하고 다음으로 MyISAM을 사용하며 최소한 기타 스토리지 엔진을 사용합니다.

    다음 명령을 사용하여 MySQL이 제공하는 스토리지 엔진을 볼 수 있습니다:

    show engies;

    또한 다음 명령을 사용하여 MySQL의 현재 기본 스토리지 엔진을 볼 수도 있습니다.

    '%storage_engine%'과 같은 변수 표시;

    MyISAMInnoDB 엔진의 차이점MyISAMInnoDB引擎的区别

    MySQL

    MySQL버전 5.5 이전의 기본 스토리지 엔진은 MyISAM 스토리지 엔진입니다. MySQL의 많은 시스템 테이블은 MyISAM 스토리지 엔진을 사용합니다. , 시스템 임시 테이블도 MyISAM 스토리지 엔진을 사용하지만 Mysql5.5 이후에는 기본 스토리지 엔진이 InnoDB 스토리지 엔진입니다. 메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.


    두 스토리지 엔진 중에서 어떻게 선택하나요?
    • 거래 운영이 있나요? 네, InnoDB입니다.
    • 동시 수정 사항도 저장되나요? 네, InnoDB입니다.
    • 데이터 수정이 적고 빠른 쿼리를 추구하고 계십니까? 네, MyISAM입니다.
    • 전체 텍스트 인덱싱을 사용하시나요? 타사 프레임워크를 참조하지 않는 경우 MyISAM을 선택할 수 있지만 타사 프레임워크와 InnDB를 사용하는 것이 더 효율적입니다.

    InnoDB 스토리지 엔진에는 주로 다음과 같은 기능이 있습니다.
    1. 트랜잭션 지원

    2. 4단계 트랜잭션 격리 지원

    3. 지원 다중 버전 읽기

    4. 행 수준 잠금 지원

    5. 읽기 및 쓰기 차단은 트랜잭션 격리 수준과 관련이 있습니다

      🎜🎜
    6. 인덱스와 데이터를 모두 캐시할 수 있는 캐싱을 지원합니다.

    7. 전체 테이블과 기본 키가 클러스터 모드에 저장되어 균형 잡힌 트리를 형성합니다.

    물론 그렇지 않습니다. InnoDB가 좋아야 한다고 하는데, 실제 개발에서는 여전히 특정 시나리오에 따라 InnoDB를 사용할지 MyISAM을 사용할지 선택해야 합니다.

    MyIASM(이 엔진은 5.5 이전 MySQL 데이터베이스의 기본 스토리지 엔진이었습니다.) 기능:

    1. MyISAM은 데이터베이스 트랜잭션을 지원하지 않습니다

    2. 지원되지 않는 행 -레벨 잠금 및 외래 키

    3. 2로 인해 INSERT 삽입 또는 UPDATE 업데이트 문을 실행할 때, 즉 쓰기 작업을 수행할 때 테이블 전체를 잠가야 하므로 효율성이 떨어집니다. Reduced

    4. MyISAM은 SELECT COUNT(*) FROM TABLE 실행 시 테이블 전체를 스캔하지 않고도 해당 값을 직접 읽을 수 있어 속도가 빠르다.

    둘의 차이점:

    1. MyISAM은 트랜잭션에 안전합니다.

    2. MyISAM 잠금의 세분성은 테이블 수준 및 InnoDB는 행 수준을 지원합니다. 자물쇠

    3. MyISAM은 전체 텍스트 인덱스를 지원하지만 InnoDB는 MySQL5.6 이전에는 전체 텍스트 인덱스를 지원하지 않습니다. MySQL5.6부터 FULLTEXT 인덱스를 지원합니다.

    사용 시나리오 비교:

    1. 많은 선택 작업을 수행하려면 MyISAM

    2. 을 선택해야 합니다. 공연을 하고 싶다면 insert 및 up 횟수가 많음 날짜 연산에는 InnoDB를 선택해야 함

    3. 대규모 데이터 세트에서는 트랜잭션 처리 및 장애 복구를 지원하기 때문에 InnoDB 엔진을 선택하는 경향이 있습니다. 데이터베이스 크기에 따라 오류 복구 시간이 결정됩니다. InnoDB는 데이터 복구를 위해 트랜잭션 로그를 사용할 수 있으며 이는 더 빠릅니다. InnoDB 엔진에서는 기본 키 쿼리도 매우 빠르지만 기본 키가 너무 길면 성능 문제도 발생한다는 점에 유의해야 합니다.

    비교적으로 보면 인터넷 기업에서 InnoDB를 더 많이 사용하고 있습니다.

    시스템 파일 저장 레이어

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    이 레이어는 우리 비즈니스 시스템의 데이터베이스로도 이해될 수 있습니다.

    시스템 파일 저장 계층은 주로 시스템 파일에 데이터베이스 데이터와 로그를 저장하는 동시에 저장소 엔진과의 트랜잭션을 완료하는 역할을 담당합니다.

    예: 데이터 파일, 로그 파일, pid 파일, 구성 파일 등

    데이터 파일

    "db.opt 파일": 이 데이터베이스의 기본 문자 집합과 확인 규칙을 기록합니다.

    "frm 파일": 테이블 구조의 정의 정보 등을 포함하여 엣지에 저장된 메타데이터 정보. 각 테이블에는 이에 해당하는 frm 파일이 있습니다.

    "MYD 파일": MyISAM 테이블의 데이터 정보를 저장하는 MyISAM 스토리지 엔진 전용 파일입니다. 각 MyISAM 테이블에는 .MYD 파일이 있습니다.

    「MYI文件」:也是MyISAM存储引擎专用的文件,存放MyISAM表的索引相关信息,每一张MyISAM表都有对应的.MYI文件。

    「ibd文件和ibdata文件」:存放InnoDB的数据文件(包括索引)。InnoDB存储引擎有两种表空间方式:独立表空间和共享表空间。

    • 独享表空间使用ibd文件来存放数据,并且每一张InnoDB表存在与之对应的.ibd文件。
    • 共享表空间使用ibdata文件,所有表共同使用一个或者多个.ibdata文件。

    「ibdata1文件」:系统表空间数据文件,存储表元数据、Undo日志等。

    「ib_logfile0、ib_logfile0文件」:Redo log日志文件。

    日志文件

    错误日志:默认是开启状态,可以通过命令查看:

    show variables like &#39;%log_error%&#39;;

    二进制日志binary log:记录了对MySQL数据库执行的更改操作,并且记录了语句的发生时间、执行耗时;但是不记录查询select、show等不修改数据的SQL。主要用于数据库恢复和数据库主从复制。也是大家常说的binlog日志。

    show variables like &#39;%log_log%&#39;;//查看是否开启binlog日志记录。
    show variables like &#39;%binllog%&#39;;//查看参数
    show binary logs;//查看日志文件

    慢查询日志:记录查询数据库超时的所有SQL,默认是10秒。

    show variables like &#39;%slow_query%&#39;;//查看是否开启慢查询日志记录。
    show variables &#39;%long_query_time%&#39;;//查看时长

    通用查询日志:记录一般查询语句;

    show variables like &#39;%general%&#39;;
    配置文件

    用于存放MySQL所有的配置信息的文件,比如:my.cnf、my.ini等。

    「pid文件」

    pid文件是mysqld应用程序在Linux或者Unix操作系统下的一个进程文件,和许多其他Linux或者Unix服务端程序一样,该文件放着自己的进程id。

    「socket文件」

    socket文件也是Linux和Unix操作系统下才有的,用户在Linux和Unix操作系统下客户端连接可以不通过TCP/IP网络而直接使用Unix socket来连接MySQL数据库。

    SQL查询流程图

    메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.

    요약

    MySQL 우리는 전체 시스템을 우리가 매일 개발하는 소프트웨어 시스템으로 생각할 수 있습니다. 또한 외부 클라이언트에 연결하도록 특별히 설계된 액세스 계층도 있습니다. 이는 우리 시스템의 게이트웨이와 매우 유사합니다. 캐시는 비즈니스 코드의 캐시와 유사하며 비즈니스 시스템에서 매개변수 구문 분석 및 매개변수 확인으로 이해될 수 있습니다. 그런 다음 스토리지를 최적화하는 수단으로 사용할 수 있습니다. 엔진은 지속성 레이어와 동일하며 파일 시스템은 전체 비즈니스 시스템과 동일합니다. MySQL整个系统我们可以看成是我们日常开发的软件系统,也有接入层,专门对接外面客户端的,和我们系统的网关就很像,缓存也就类似我们业务代码中使用的缓存,解析器可以理解为业务系统中参数解析以及参数校验,优化层可以当做我们开发代码优化的手段,然后存储引擎就相当于我们的持久层,文件系统相当于整个业务系统中的数据库。

    可能比喻不是非常的恰当,但是希望大家能领略轻重的含义,目的只有一个,那就是让大家能轻松掌握MySQL비유가 별로 적절하지 않을 수도 있지만, 엄중함의 의미를 모두가 이해할 수 있기를 바랍니다. 목적은 오직 하나, 모두가 쉽게 이해할 수 있도록 하는 것입니다.MySQL의 전반적인 상황.

    기사의 일부 사진은 인터넷에서 가져온 것이므로 삭제됩니다!

    일부 위대한 사람이나 위대한 신을 부러워하지 마세요. 그들도 한걸음씩 다가왔습니다. 자신감을 가지세요. 조금씩 실천하고 성실하게 노력하면 훌륭한 스승이 될 것입니다.

    추천도서

    위 내용은 메이투안 면접관: MySQL 구조 시스템을 명확하게 설명하고 즉시 제안하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 Java后端技术全栈에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제