이 글은 주로 MYSQL 면접 질문 (1)을 공유하고 있으니, 도움이 되셨으면 좋겠습니다.
【관련 주제 추천: mysql 면접 질문(2020)】
1. 고동시성 시스템 설계 방법
1 합리적인 트랜잭션 격리 수준을 포함한 데이터베이스 최적화, ④ 서버 로드 밸런스
2. 잠금 최적화 전략
① 읽기 및 쓰기 분리② 분할된 잠금 ③ 잠금 유지 시간 단축
④ 다중 스레드를 사용하려고 합니다. 동일 순서대로 리소스를 획득하세요 등. 이것들은 모두 상황에 따라 다릅니다. 예를 들어 잠금의 세분성은 너무 자세할 수 없습니다. 그렇지 않으면 스레드가 너무 많이 잠기고 해제될 수 있습니다. 효율성은 하나의 큰 잠금만큼 좋지 않습니다. 이 부분에 대해 면접관님과 오랫동안 이야기를 나눴습니다
3 인덱스의 기본 구현 원리와 최적화
B+트리, 최적화된
B+
tree
Main 모든 리프 노드의 다음 리프 노드에 포인터를 추가합니다. 따라서 InnoDB에서는 기본 자동 증가 기본 키를 대부분의 테이블의 기본 인덱스로 사용할 것을 권장합니다. 4. 인덱스가 설정되어 있지만 사용할 수 없는 경우
① "%"로 시작하는 LIKE 문, 퍼지 매칭 ② OR 문 앞뒤에 인덱스를 사용하지 않음 ③ 암시적 변환 (varchar를 작은 따옴표로 묶지 않으면 자동으로 int 유형으로 변환될 수 있음) 5. SQL 문 최적화
alter로 순서를 처리하는 방법 여러 번 하나로 병합해 보세요. 삽입과 삭제도 필요합니다. 병합 등 6
실전에서 최적화하는 방법MySQL
다음 4가지 항목을 순서대로 답변해 드렸습니다. 효과면에서 가장 큰 영향을 미치며 다음과 같이 점점 작아집니다.
① SQL
문 및 인덱스 최적화
②데이터베이스 테이블 구조 최적화
3 시스템 구성 최적화order 하드웨어 최적화
8. SQL 인젝션의 주요 특징변종이 많고, 단순한 공격이며, 큰 피해가 있습니다
9. SQL 인젝션의 주요 피해데이터베이스 데이터의 무단 조작웹 페이지의 악의적인 수정
개인적으로 시스템을 추가하는 것 계정 또는 데이터베이스 사용자 계정입니다웹페이지에 걸려있는 트로이 목마 · 가장 적합한 필드 속성을 선택하고 정의를 줄입니다. 가능한 한 필드 너비를 NOTNULL로 설정하십시오. 예를 들어 'province' 및 'gender'는 ENUM · 하위 쿼리 대신 연결 · 수동으로 생성된 임시 테이블을 대체하려면 유니온 (UNION)을 신청하세요 ·트랜잭션 처리 ·테이블 잠금 및 트랜잭션 처리 최적화 · 외래키 적용 가능, 최적화 테이블 잠금 ·인덱스 생성 ·쿼리문 최적화 인덱스는 특수 파일입니다 (InnoDB 데이터 테이블의 인덱스는 테이블 공간의 필수 부분입니다.) 여기에는 데이터 테이블의 모든 레코드에 대한 참조 포인터가 포함되어 있습니다. 트랜잭션(트랜잭션)은 하나의 단위로 정렬된 데이터베이스 작업 집합입니다. 그룹의 모든 작업이 성공하면 트랜잭션이 성공한 것으로 간주되며, 하나의 작업만 실패하더라도 트랜잭션은 성공하지 못합니다. 모든 작업이 완료되면 트랜잭션이 커밋되고 해당 수정 사항이 다른 모든 데이터베이스 프로세스에 적용됩니다. 작업이 실패하면 트랜잭션이 롤백되고 트랜잭션의 모든 작업 효과가 취소됩니다. ACID의 네 가지 주요 특성은 원자성, 격리성, 일관성 및 내구성입니다. XSS는 크로스 사이트 스크립팅 공격입니다. 먼저 크로스 사이트 스크립팅 취약점을 사용하여 공격자가 특권 모드에서 구성한 스크립트를 실행한 다음 안전하지 않은 Activex 컨트롤을 사용하여 악의적인 동작을 수행합니다. SQL 인젝션 원인 : 프로그램 개발 과정에서 표준적인 SQL문 작성과 특수문자 필터링에 주의를 기울이지 않아 클라이언트가 전역변수 POST를 통해 일부 SQL문을 제출할 수 있었던 문제 정상적인 실행을 위해서는 GET을 사용합니다. 구성 파일에서 magic_quotes_gpc 및 Magic_quotes_runtime 설정을 활성화하세요 sql 문을 실행할 때 addlashes를 사용하세요. ql 문 변환 Sql 언제 문장을 작성할 때 큰 따옴표와 작은 따옴표를 생략하지 마십시오. sql 문에서 업데이트, 삽입, 삭제, 선택, * 등 일부 키워드를 필터링합니다. 데이터베이스 테이블 및 필드의 명명 기술을 향상하세요. 프로그램의 특성에 따라 중요한 필드의 이름을 추측하기 어렵게 만드세요. PHP 구성 파일에서 Register_globals를 off로 설정하고, 전역 변수 등록을 끄세요. 오류 메시지 제어, 브라우저에 오류 메시지 출력 안 함, 로그 파일에 오류 메시지 쓰기 . 데이터 테이블의 특정 정보에 빠르게 액세스하고 검색 속도를 향상시키세요 고유한 인덱스를 생성하여 데이터베이스 테이블의 각 데이터 행의 고유성을 보장하세요. 테이블 및 테이블 간 조인 가속화 데이터 검색에 그룹화 및 정렬 절을 사용하면 쿼리에서 그룹화 및 정렬 시간을 대폭 줄일 수 있습니다 부정적인 영향: 가장 자주 사용되는 필드에 인덱스를 생성하여 쿼리 범위를 좁힙니다. 정렬이 필요한 자주 사용하는 필드에 인덱스를 생성합니다 질의에 거의 포함되지 않는 컬럼이나 중복된 값이 많은 컬럼에 대해서는 인덱스를 생성하는 것은 적절하지 않습니다. 일부 특수 데이터 유형의 경우 텍스트 필드(text) 등과 같은 인덱스를 생성하는 것이 적합하지 않습니다. 다른 데이터베이스와 비교하여 가장 중요한 기능은 플러그인 테이블 스토리지 엔진입니다. 기억하세요: 스토리지 엔진은 데이터베이스가 아닌 테이블을 기반으로 합니다. InnoDB와 MyISAM의 차이점: InnoDB 스토리지 엔진: 주로 OLTP(온라인 트랜잭션 처리, 온라인 트랜잭션 처리) 애플리케이션용으로 ACID 트랜잭션( 트랜잭션을 지원하는 BDB의 첫 번째 스토리지 엔진 개발이 중단되었습니다. 기능: · 행 잠금 설계, 외래 키 지원, 트랜잭션 지원, 동시성 지원, 잠금 세분성 mvcc 행 수준 잠금 지원; MyISAM 스토리지 엔진: 은 주로 OLAP(온라인 분석 처리, 온라인 분석 및 처리) 애플리케이션을 위해 MySQL에서 공식적으로 제공하는 스토리지 엔진입니다. ㅋㅋㅋ 예. 작업 속도가 빠릅니다 ; 먼저 크로스 조인이 무엇인가요? : 크로스 조인이라고도 합니다. 데카르트 곱(Cartesian product)은 어떤 조건도 사용하지 않음을 의미하며 한 테이블의 모든 레코드를 다른 테이블의 모든 레코드와 직접 일치시킵니다. Inner Join은 조건만 만족하는 교차 연결로, 조건에 맞지 않는 레코드는 필터링되어 결과 집합에 나타나지 않습니다. 즉, 내부 조인은 일치하는 레코드만 연결합니다. 왼쪽 외부 조인, 왼쪽 조인이라고도 하며 왼쪽 테이블이 기본 테이블이고 왼쪽 테이블의 모든 레코드가 결과 집합에 표시됩니다. 오른쪽 테이블에서 일치하지 않는 레코드의 경우 여전히 표시해야 하며, 오른쪽에는 해당 필드 값이 NULL로 채워져 있습니다. 오른쪽 외부 조인(오른쪽 조인이라고도 함)은 오른쪽 테이블이 기본 테이블이고 오른쪽 테이블의 모든 레코드가 결과 집합에 나타납니다. 왼쪽 조인과 오른쪽 조인은 서로 바꿔 사용할 수 있으며 MySQL은 현재 완전 외부 조인을 지원하지 않습니다. MyISAM, InnoDB, BDB(BerkeleyDB), Merge, Memory(Heap), 예제, Federated , 트랜잭션은 사용자가 정의한 데이터베이스 작업 순서입니다. 이러한 작업은 완료되거나 전혀 수행되지 않으며 분할할 수 없는 작업 단위입니다. 트랜잭션 롤백은 트랜잭션에 의해 완료된 데이터베이스에 대한 업데이트 작업을 실행 취소하는 것을 의미합니다. 데이터베이스의 서로 다른 두 테이블을 동시에 수정하려는 경우 트랜잭션이 아닌 경우 첫 번째 테이블을 수정하면 두 번째 테이블을 수정하는 과정에서 예외가 발생할 수 있으며 이는 현재는 두 번째 테이블만 수정되지 않은 상태이고 첫 번째 테이블은 수정된 상태입니다. 그리고 트랜잭션으로 설정하면 첫 번째 테이블이 수정되고 두 번째 테이블이 비정상적으로 수정되어 수정이 불가능한 경우 첫 번째 테이블과 두 번째 테이블이 수정되지 않은 상태로 돌아가는 것을 소위 트랜잭션 롤백이라고 합니다. 2. SQL 언어에는 어떤 부분이 포함되나요? 각 섹션의 액션 키워드는 무엇입니까? 답변: SQL 언어는 데이터 정의(DDL), 데이터 조작(DML), 데이터 제어(DCL) 및 데이터 쿼리(DQL)의 네 부분으로 구성됩니다. 데이터 정의: 테이블 만들기, 테이블 변경, 테이블 삭제, 인덱스 생성/삭제 등 데이터 조작: 선택, 삽입, 업데이트, 삭제, 데이터 제어: grant ,revoke 데이터 쿼리: select 3. 무결성 제약 조건에는 무엇이 포함되나요? 답변: 데이터 무결성(데이터 무결성)은 데이터의 정확성과 신뢰성을 의미합니다. 은 다음 네 가지 범주로 나뉩니다. 1) 엔터티 무결성: 테이블의 각 행이 테이블의 고유한 엔터티임을 규정합니다. 2) 도메인 무결성: 테이블의 열이 값 범위, 정밀도 및 기타 규정을 포함하는 특정 데이터 유형 제약 조건을 충족해야 함을 의미합니다. 3) 참조 무결성: 두 테이블의 기본 키와 외래 키의 데이터가 일관되어야 함을 의미하며, 테이블 간 데이터의 일관성을 보장하고 데이터베이스 매체에 분산된 데이터 손실이나 의미 없는 데이터를 방지합니다. 4) 사용자 정의 무결성: 다양한 관계형 데이터베이스 시스템에는 애플리케이션 환경에 따라 특별한 제약 조건이 필요한 경우가 많습니다. 사용자 정의 무결성은 특정 관계형 데이터베이스에 대한 제약 조건으로, 특정 응용 프로그램이 충족해야 하는 의미론적 요구 사항을 반영합니다.
테이블 관련 제약 조건: 열 제약 조건(NOT NULL(null이 아닌 제약 조건)) 및 테이블 제약 조건(PRIMARY KEY, 외래 키, 검사, UNIQUE)을 포함합니다.
4. 거래란 무엇인가요? 그리고 그 특징은? 답변: 트랜잭션: 일련의 데이터베이스 작업이자 데이터베이스 애플리케이션의 기본 논리 단위입니다. 트랜잭션 특성: (1) 원자성: 즉, 불가분성, 트랜잭션이 모두 실행되거나 전혀 실행되지 않습니다. (2) 일관성 또는 문자열 가능성. 트랜잭션을 실행하면 데이터베이스가 올바른 상태에서 다른 (3) 격리 상태로 변환됩니다. 트랜잭션이 올바르게 커밋되기 전에는 트랜잭션에 의한 데이터 변경 사항이 다른 트랜잭션에 제공되는 것이 허용되지 않습니다. (4) 지속성. 트랜잭션이 올바르게 제출되면 그 결과는 데이터베이스에 영구적으로 저장됩니다. 트랜잭션 제출 후 다른 실패가 발생하더라도 해당 트랜잭션의 처리 결과는 저장됩니다. 또는 다음과 같이 이해하십시오. 트랜잭션은 논리적 작업 단위로 함께 바인딩된 SQL 문 그룹입니다. 문 작업이 실패하면 전체 작업이 실패하고 이후 작업도 실패합니다. 작업은 작업 이전 상태로 롤백되거나 노드가 있습니다. 무언가가 실행되거나 실행되지 않도록 하기 위해 트랜잭션을 사용할 수 있습니다. 그룹화된 명세서를 트랜잭션으로 간주하려면 ACID 테스트 , 즉 원자성, 일관성, 격리성 및 내구성을 통과해야 합니다. 5. 자물쇠란 무엇인가요? 답변: 데이터베이스는 여러 사용자가 사용하는 공유 리소스입니다. 여러 사용자가 동시에 데이터에 액세스하면 여러 트랜잭션이 동시에 데이터베이스의 동일한 데이터에 액세스합니다. 동시 작업을 제어하지 않으면 잘못된 데이터를 읽고 저장하여 데이터베이스의 일관성이 손상될 수 있습니다.
잠금은 데이터베이스 동시성 제어를 달성하는 데 매우 중요한 기술입니다. 트랜잭션은 데이터 개체에 대해 작동하기 전에 먼저 시스템에 잠금 요청을 보냅니다. 잠금 후 트랜잭션은 데이터 개체에 대한 특정 제어권을 갖게 됩니다. 트랜잭션이 잠금을 해제하기 전에는 다른 트랜잭션이 데이터 개체를 업데이트할 수 없습니다. 기본 잠금 유형: 잠금에는 행 수준 잠금과 테이블 수준 잠금이 포함됩니다. 6. 커서란 무엇입니까? 답변: 뷰는 물리적 테이블과 동일한 기능을 가진 가상 테이블입니다. 뷰는 일반적으로 하나의 테이블 또는 여러 테이블의 행이나 열의 하위 집합으로 추가, 수정, 확인 및 작동될 수 있습니다. 뷰를 수정해도 기본 테이블에는 영향을 주지 않습니다. 다중 테이블 쿼리보다 데이터를 더 쉽게 얻을 수 있습니다. 커서: 쿼리 결과 집합을 단위로 효과적으로 처리합니다. 커서를 셀의 특정 행에 배치하여 결과 집합의 현재 행에서 하나 이상의 행을 검색할 수 있습니다. 결과 세트의 현재 행을 변경할 수 있습니다. 커서는 일반적으로 사용되지 않지만, 데이터를 하나씩 처리해야 할 때 커서는 매우 중요합니다. 7. 저장 프로시저란 무엇인가요? 무엇을 부르나요? 답변: 저장 프로시저는 미리 컴파일된 SQL 문이라는 장점이 있습니다. 즉, 한 번만 생성하면 나중에 프로그램에서 여러 번 호출할 수 있다는 의미입니다. 특정 작업에 SQL을 여러 번 실행해야 하는 경우 저장 프로시저를 사용하는 것이 간단한 SQL 문을 실행하는 것보다 빠릅니다. 명령 개체를 사용하여 저장 프로시저를 호출할 수 있습니다. 8. 인덱스의 역할은 무엇인가요? 그리고 장점과 단점은 무엇입니까? 답변: 인덱스는 데이터베이스 검색 엔진이 데이터 검색 속도를 높이기 위해 사용할 수 있는 특수 쿼리 테이블입니다. 실생활에서 책의 목차와 매우 유사합니다. 책 전체를 조회하지 않고도 원하는 데이터를 찾을 수 있습니다. 인덱스는 고유할 수 있으며 인덱스를 생성하면 단일 열 또는 여러 열을 지정할 수 있습니다. 단점은 데이터 입력 속도가 느려지고 데이터베이스 크기가 증가한다는 것입니다. 9. 대중적인 방식으로 세 가지 패러다임을 이해하는 방법은 무엇입니까? 답변: 첫 번째 정규형: 1NF는 속성에 대한 원자성 제약 조건으로, 속성은 원자성이고 분해될 수 없습니다. 두 번째 정규형: 2NF는 레코드에 대한 고유성 제약 조건입니다. 레코드에는 고유 식별자, 즉 엔터티의 고유성이 필요합니다. 세 번째 정규형: 3NF는 필드 중복에 대한 제약 조건입니다. 즉, 어떤 필드도 다른 필드에서 파생될 수 없습니다. 필드가 중복되지 않아야 합니다. . 패러다임적 디자인의 장점과 단점: 장점: 데이터 중복을 최대한 줄여 업데이트를 빠르고 작게 할 수 있습니다 단점: 쿼리에는 여러 테이블을 연결해야 하기 때문에 쓰기 효율성이 떨어지고 읽기 효율성이 높아지며 더 어렵습니다. 비정규화: 장점: 테이블 연결을 줄이고 더 나은 인덱스 최적화를 가능하게 할 수 있습니다 단점: 데이터 중복성 및 데이터 이상, 데이터 수정에 더 많은 비용이 필요함 시간 비용이 많이 듭니다 10. 기본 테이블이란 무엇인가요? 뷰란 무엇입니까? 답변: 기본 테이블은 독립적으로 존재하는 테이블입니다. SQL에서는 하나의 관계가 하나의 테이블에 해당합니다. 뷰는 하나 이상의 기본 테이블에서 파생된 테이블입니다. 뷰 자체는 데이터베이스에 독립적으로 저장되지 않고 가상 테이블입니다. 11. 뷰의 장점을 설명해주세요. 답변: (1) 뷰는 사용자 작업을 단순화할 수 있습니다. (2) 뷰는 사용자가 여러 관점에서 동일한 데이터를 볼 수 있도록 합니다. (3) 뷰는 데이터베이스에 대해 어느 정도 논리적 독립성을 제공합니다. 기밀 데이터에 대한 보안 보호를 제공합니다. 12. NULL은 무엇을 의미하나요? 답변: NULL 값은 UNKNOWN을 나타냅니다. 이는 ""(빈 문자열)을 나타내지 않습니다. NULL 값과 비교하면 NULL 값이 생성됩니다. 어떤 값도 NULL 값과 비교할 수 없으며 논리적으로 답변을 얻을 것으로 기대할 수 없습니다. NULL 판단을 수행하려면 IS NULL을 사용하세요 13. 기본 키, 외래 키, 인덱스의 차이점은 무엇인가요? 기본 키, 외래 키 및 인덱스의 차이점 정의: 기본 키 - 레코드를 고유하게 식별하고, 중복될 수 없으며, 비워 둘 수 없습니다. 외래 키 - - 테이블의 외래 키는 다른 테이블의 기본 키입니다. 외래 키는 중복될 수 있으며 null 값이 될 수 있습니다. 인덱스 - 이 필드에는 중복 값이 없지만 null 값이 있을 수 있습니다. 기능: 기본 키 - 데이터 무결성을 보장하는 데 사용됨 외래 키 - 다른 테이블과 연결을 설정하는 데 사용됨 색인 - 예전에는 쿼리 정렬 속도 향상 번호: 기본 키 - 기본 키는 하나만 있을 수 있습니다. 외래 키 - 테이블에 여러 개의 외래 키가 있을 수 있습니다. 인덱스 - 테이블에 여러 개의 고유 인덱스가 있을 수 있습니다. 14. 테이블의 필드가 특정 범위의 값만 허용하도록 하려면 무엇을 사용할 수 있습니까? 답변: 입력을 제한하도록 데이터베이스 테이블에 정의된 제한 사항을 확인하세요. 이 열의 값입니다. 트리거를 사용하여 데이터베이스 테이블의 필드가 허용할 수 있는 값을 제한할 수도 있지만 이 방법을 사용하려면 테이블에 트리거를 정의해야 하며 이는 경우에 따라 성능에 영향을 미칠 수 있습니다. 15. SQL 문을 최적화하는 방법은 무엇입니까? (몇개 선택) (1) Where 절 : Where 테이블은 다른 Where 조건보다 먼저 작성해야 하며, 최대 레코드 수를 필터링할 수 있는 조건은 마지막에 작성해야 합니다. Where 절의 .HAVING이 마지막입니다. (2) IN을 EXISTS로 바꾸고 NOT IN을 NOT EXISTS로 바꿉니다. (3) 인덱스 열에 계산 사용 방지 (4) 인덱스 열에 IS NULL 및 IS NOT NULL 사용 방지 (5) 쿼리 최적화, 시도해야 함 전체 테이블 스캔을 피하려면 먼저 where 및 order by와 관련된 열에 인덱스를 생성하는 것을 고려하십시오. (6) where 절의 필드에 대한 null 값 판단을 피해야 합니다. 그렇지 않으면 엔진이 인덱스 사용을 포기하고 전체 테이블 스캔을 수행합니다. (7) where 절을 사용하지 마세요. 절의 필드에 표현식 작업을 수행하면 엔진이 인덱스 사용을 포기하고 전체 테이블 스캔을 수행하게 됩니다. 16. '상관 하위 쿼리'와 '비상관 쿼리'의 차이점은 무엇인가요? SQL 문에 '하위 쿼리'가 있습니까? 답변: 하위 쿼리: 다른 쿼리 내에 중첩된 쿼리가 호출됩니다. 하위 쿼리를 내부 쿼리라고도 하며, 하위 쿼리가 포함된 문을 외부 쿼리(메인 쿼리라고도 함)라고 합니다. 모든 하위 쿼리는 상관 하위 쿼리와 비상관 하위 쿼리라는 두 가지 범주로 나눌 수 있습니다. (1) 비상관 하위 쿼리는 외부 쿼리와 독립된 하위 쿼리인 하위 쿼리입니다. 총 한 번 실행되며 실행 후 값이 외부 쿼리로 전달됩니다. (2) 해당 하위 쿼리의 실행은 외부 쿼리의 데이터에 따라 달라집니다. 외부 쿼리는 행을 실행할 때 하위 쿼리가 한 번 실행됩니다. 상관되지 않은 하위 쿼리가 상관된 하위 쿼리보다 효율적입니다 17. char와 varchar의 차이점은 무엇인가요? 답변: 고정 길이 유형이고, varchar는 가변 길이 유형입니다. 차이점은 char(M) 유형의 데이터 열이며, 각 값은 M 바이트를 차지합니다. 특정 길이가 M보다 작으면 MySQL은 오른쪽에 공백 문자를 채웁니다. (패딩 공백 문자는 검색 작업 중에 제거됩니다.) varchar(M) 유형 데이터 열에서 각 값은 해당 길이를 기록하는 데 충분한 바이트와 1바이트만 차지합니다. 즉, 총 길이는 L+1바이트입니다. ). varchar는 다음 시나리오에 적용 가능합니다. 문자열 열의 최대 길이가 평균 길이보다 훨씬 깁니다. 2. 문자열은 거의 업데이트되지 않으며 저장소 조각화가 발생하기 쉽습니다. 3. 다중 바이트 문자 집합을 사용합니다. 문자열 저장 Char 시나리오: 대략적인 길이(md5 값, ID 카드, 휴대전화 번호)로 문자열을 저장하고 상대적으로 짧은 길이(varchar는 문자열을 기록하기 위해 추가 공간이 필요하기 때문) 길이), 자주 업데이트되는 문자열에 더 적합합니다. 업데이트 중에 페이지 분할이 발생하지 않아 스토리지 조각화를 방지하고 더 나은 io 성능을 얻을 수 있습니다 18. Myisam과 innodb의 차이점입니다. 답변: MyISAM은 테이블 잠금이 빈번하고 교착 상태가 없는 애플리케이션에 적합합니다. innodb는 트랜잭션을 지원하는 스토리지 엔진, 삽입 및 업데이트 작업이 많은 애플리케이션에 적합합니다. 올바르게 설계하면 행 잠금입니다(가장 큰 차이점은 잠금 수준에 있음). 및 대규모 동시성. 19. 데이터 테이블 유형은 무엇입니까? 답변: MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV 등 MyISAM: 성숙하고 안정적이며 관리하기 쉽고 읽기 빠릅니다. 일부 기능(트랜잭션 등)은 테이블 수준 잠금을 지원하지 않습니다. InnoDB: 트랜잭션, 외래 키 및 기타 기능, 데이터 행 잠금을 지원합니다. 많은 공간을 차지하고 전체 텍스트 색인 생성 등을 지원하지 않습니다. 20. MySQL 데이터베이스는 하루에 50,000개 이상 증가하는 스토리지로 사용되며, 운영 및 유지 관리는 어떻게 최적화할 수 있나요? a. 데이터베이스 구조를 잘 설계하고, 부분적인 데이터 중복을 허용하고, 조인 쿼리를 피하여 효율성을 높이세요. b. 적절한 테이블 필드 데이터 유형과 스토리지 엔진을 선택하고 적절하게 인덱스를 추가합니다. c. mysql 라이브러리의 마스터-슬레이브 읽기 및 쓰기가 분리되어 있습니다. d. 일반 테이블을 찾아 단일 테이블의 데이터 양을 줄여 쿼리 속도를 높입니다. e. memcached, apc 등과 같은 캐싱 메커니즘을 추가합니다. f. 자주 변경되지 않는 페이지에 대해 정적 페이지를 생성합니다. g. 효율적인 SQL을 작성하세요. 예를 들어 SELECT * FROM TABEL은 SELECT field_1, field_2, field_3 FROM TABLE로 변경됩니다. 21. 트래픽이 많은 웹 사이트의 경우 페이지 방문 통계 문제를 해결하기 위해 어떤 방법을 사용합니까? 답변:a. 서버가 현재 트래픽을 지원할 수 있는지 확인하세요. b. 데이터베이스 액세스를 최적화합니다. c. 사진 핫링크 등 링크(핫링크)에 대한 외부 접근은 금지됩니다. d. 파일 다운로드를 제어합니다. e. 다른 호스트를 사용하여 트래픽을 분산하세요. f. 검색 통계 소프트웨어를 사용하여 방문 횟수를 파악하고 타겟 최적화를 수행합니다. 4. SQL을 최적화하는 방법은 무엇입니까? (학생들은 다음 설명을 이해한 후 자신의 이해를 바탕으로 일반적인 의미를 표현할 수 있습니다.) 답변: (1) 올바른 스토리지 엔진 선택 Take MySQL 예를 들어 MyISAM과 InnoDB라는 두 개의 스토리지 엔진을 포함합니다. 각 엔진에는 장점과 단점이 있습니다. MyISAM은 많은 수의 쿼리가 필요한 일부 애플리케이션에 적합하지만 많은 수의 쓰기 작업에는 적합하지 않습니다. 필드만 업데이트해도 테이블 전체가 잠기며 읽기 작업이 완료될 때까지 다른 프로세스, 심지어 읽기 프로세스도 작동할 수 없습니다. 또한 MyISAM은 SELECT COUNT(*)와 같은 계산 속도가 매우 빠릅니다. InnoDB의 추세는 매우 복잡한 스토리지 엔진이 될 것이며 일부 소규모 애플리케이션의 경우 MyISAM보다 느릴 것입니다. 그러나 "행 잠금"을 지원하므로 쓰기 작업이 많을 때 더 좋습니다. 또한 트랜잭션과 같은 고급 애플리케이션도 지원합니다. (2) 필드의 데이터 유형 최적화 열이 작을수록 속도가 빨라진다는 원칙을 기억하세요. 테이블에 몇 개의 열(예: 사전 테이블, 구성 테이블)만 있는 경우 INT를 기본 키로 사용할 이유가 없습니다. MEDIUMINT, SMALLINT 또는 더 작은 TINYINT를 사용하는 것이 더 경제적입니다. 시간을 추적할 필요가 없다면 DATETIME보다 DATE를 사용하는 것이 훨씬 좋습니다. 물론 확장을 위한 충분한 공간도 확보해야 합니다. (3) 검색 필드에 인덱스 추가 인덱스가 반드시 기본 키나 유일한 필드를 의미하는 것은 아닙니다. 테이블에 항상 검색에 사용할 필드가 있는 경우 해당 필드를 인덱싱하는 것이 가장 좋습니다. 검색하려는 필드가 큰 텍스트 필드가 아닌 경우 전체 텍스트 인덱스를 만들어야 합니다. (4) Select *를 사용하지 마십시오. 데이터베이스에서 더 많은 데이터를 읽을수록 쿼리 속도가 느려집니다. 또한 데이터베이스 서버와 웹 서버가 두 개의 독립된 서버인 경우 네트워크 전송 부하도 증가합니다. 데이터 테이블의 모든 필드를 쿼리하려는 경우에도 * 와일드카드 문자를 사용하지 마십시오. 내장된 필드 제외 정의를 잘 활용하면 더 편리할 수 있습니다. (5)VARCHAR 대신 ENUM을 사용하세요 ENUM 유형은 매우 빠르고 컴팩트합니다. 실제로는 TINYINT를 보유하지만 문자열로 나타납니다. 이런 식으로 이 필드를 사용하여 선택 목록을 만드는 것이 매우 완벽해집니다. 예를 들어 성별, 민족, 부서, 상태 등 필드의 값이 제한되어 고정되어 있는 경우 VARCHAR 대신 ENUM을 사용해야 합니다. (6) 가능할 때마다 NOT NULL을 사용하세요. NULL 값을 사용해야 하는 특별한 이유가 없다면 필드를 항상 NOT NULL로 유지해야 합니다. NULL에는 실제로 추가 공간이 필요하며 비교를 수행하면 프로그램이 더 복잡해집니다. 물론 이것이 NULL을 사용할 수 없다는 의미는 아닙니다. 현실은 매우 복잡하며 여전히 NULL 값을 사용해야 하는 상황이 있을 것입니다. (7) 고정 길이 테이블이 더 빨라집니다. 테이블의 모든 필드가 "고정 길이"인 경우 전체 테이블이 "정적" 또는 "고정 길이"로 간주됩니다. 예를 들어 테이블에는 VARCHAR, TEXT, BLOB 유형의 필드가 없습니다. 이러한 필드 중 하나를 포함하는 한 테이블은 더 이상 "고정 길이 정적 테이블"이 아니며 MySQL 엔진은 이를 다른 방식으로 처리합니다. 고정 길이 테이블은 MySQL이 더 빠르게 검색하기 때문에 성능을 향상시킵니다. 왜냐하면 이러한 고정 길이를 사용하면 다음 데이터의 오프셋을 쉽게 계산할 수 있으므로 자연스럽게 읽기가 더 빨라지기 때문입니다. 그리고 필드의 길이가 고정되어 있지 않으면 다음 필드를 찾으려고 할 때마다 프로그램이 기본 키를 찾아야 합니다. 또한 고정 길이 테이블은 캐시하고 다시 작성하기가 더 쉽습니다. 그러나 유일한 부작용은 고정 길이 필드가 일부 공간을 낭비한다는 것입니다. 고정 길이 필드는 사용 여부에 관계없이 너무 많은 공간을 필요로 하기 때문입니다.表22, 中 中 中
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ Date: (생일)은 string.datatime.int를 사용하여 저장하는 것보다 적은 바이트를 차지합니다. date를 사용하면 날짜와 월을 저장하는 데 3바이트만 필요합니다. 날짜 및 시간 함수를 사용하여 날짜를 가져올 수도 있습니다. . Calculate Time: 데이터의 시간 부분을 저장합니다 Note: 날짜 및 시간 데이터를 저장하는 데 문자열 유형을 사용하지 마십시오. 일반적으로 문자열보다 저장 공간을 덜 차지합니다. 날짜 기능을 검색하고 필터링할 때 사용) 날짜와 시간을 저장하기 위해 int를 사용하는 것은 타임스탬프 유형을 사용하는 것만큼 좋지 않습니다. 관련 추천: 11. 데이터베이스 최적화 방법
MySQL 데이터베이스를 최적화하는 8가지 방법(클래식 필수) 다운로드하려면 클릭하세요
19. 인덱스를 간략하게 설명하자면, MySQL의 기본 키, 고유 인덱스 및 공동 인덱스의 차이점은 (읽기 및 쓰기 모두에서) 데이터베이스 성능에 어떤 영향을 미칩니 까? (시나 기술 부서)
일반 인덱스(키워드 KEY 또는 INDEX로 정의된 인덱스)의 유일한 작업은 데이터에 대한 액세스 속도를 높이는 것입니다.
일반 인덱스를 사용하면 인덱스된 데이터 열에 중복 값이 포함될 수 있습니다. 특정 데이터 열에 서로 다른 값만 포함될 것이라고 판단할 수 있는 경우 이 데이터 열에 대한 인덱스를 생성할 때 UNIQUE 키워드를 사용하여 이를 고유 인덱스로 정의해야 합니다. 즉, 고유 인덱스는 데이터 레코드의 고유성을 보장할 수 있습니다.
기본 키는 특수한 고유 인덱스입니다. 테이블에는 하나의 기본 키 인덱스만 정의할 수 있습니다. 기본 키는 레코드를 고유하게 식별하는 데 사용되며 PRIMARY KEY 키워드를 사용하여 생성됩니다.
인덱스는 공동 인덱스인 INDEX(columnA, columnB) 인덱스와 같이 여러 데이터 열을 포함할 수 있습니다.
인덱스를 사용하면 데이터 쿼리 속도를 크게 향상시킬 수 있지만, 이러한 쓰기 작업을 수행할 때는 인덱스 파일을 동작시켜야 하기 때문에 테이블 삽입, 삭제, 업데이트 속도가 느려지게 됩니다. 20. 데이터베이스에서 트랜잭션이란 무엇입니까?
21. XSS 공격에 대해 알고 계시나요? 그것을 예방하는 방법은 무엇입니까?
제출된 콘텐츠를 필터링하고 문자열에 특수 기호를 구현하려면 htmlspecialchars() 함수를 사용하세요. 22. SQL 주입 취약점의 원인은 무엇입니까? 그것을 예방하는 방법은 무엇입니까?
SQL 주입을 방지하는 방법:
25. 인덱싱은 매우 중요한 개념입니다. 인덱싱에 관한 몇 가지 질문에 답해 주세요.
a), 인덱싱의 목적은 무엇입니까?
b) 인덱스가 데이터베이스 시스템에 미치는 부정적인 영향은 무엇입니까?
인덱스를 생성하고 유지하는 데는 시간이 걸리며, 테이블이 데이터를 차지해야 할 뿐만 아니라 인덱스가 물리적 공간을 차지해야 하는 데이터 양이 증가함에 따라 이 시간도 늘어납니다. 공간, 각 인덱스는 물리적 공간도 차지해야 합니다. 테이블이 추가, 삭제, 수정될 때 인덱스는 동적으로 유지되어야 하므로 데이터 유지 관리 속도가 줄어듭니다. c) 데이터 테이블 인덱싱의 원칙은 무엇입니까?
d), 어떤 상황에서 인덱스를 생성하는 것이 적절하지 않습니까?
26 MySQL 데이터베이스에서 MyISAM과 InnoDB의 차이점을 간략하게 설명하세요
, 작업을 너무 자주 읽고 쓸 수 없습니다
27. MySQL 외부 조인, 내부 조인 및 자체 조인의 차이점을 설명하세요.
외부 조인결과 집합에는 조인 조건을 충족하는 행뿐만 아니라 왼쪽 테이블, 오른쪽 테이블 또는 두 테이블 모두
의 모든 데이터 행이 포함됩니다. 세 가지 상황을 왼쪽 외부 조인, 오른쪽 외부 조인, 완전 외부 조인이라고 합니다. 28 3개 이상의 MySQL 데이터베이스 스토리지 엔진 이름을 적어보세요(팁: 대소문자 구분 안 함)
Archive, CSV, Blackhole, MaxDB 및 12개 이상의 엔진33 Myql
위 내용은 MYSQL 면접 질문 (1)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!