데이터베이스 SQL 선택 쿼리 작동 방식
저는 전문 DBA는 아니지만 B/S 아키텍처를 갖춘 개발자로서 항상 데이터베이스와 떼려야 뗄 수 없는 존재입니다. 일반적으로 개발자는 SQL의 네 가지 기본 문인 선택, 삽입, 삭제 및 업데이트만 사용합니다. 하지만 나는 이것이 어떻게 작동하는지 연구한 적이 없습니다. 이 기사에서는 데이터베이스에서 select가 어떻게 작동하는지 이야기하고 싶습니다.
B/S 아키텍처의 가장 고전적인 주제는 크게 데이터 계층, 비즈니스 로직 계층, 프리젠테이션 계층으로 나눌 수 있는 3계층 아키텍처입니다. 레코드 쿼리와 같은 데이터베이스와 상호 작용합니다. 우리는 종종 쿼리 SQL을 작성한 다음 프로그램을 호출하여 SQL을 실행합니다. 하지만 내부 작업 흐름은 무엇입니까? 어떤 단계를 먼저 해야 할지, 다음 단계는 무엇인지 등 대부분의 친구들이 저처럼 확신이 없는 것 같아요.
1단계: 애플리케이션이 쿼리 SQL 문을 서버로 전송하여 실행합니다.
SQL 문을 실행할 때 데이터 계층에서 애플리케이션은 해당 데이터베이스 서버에 연결하고 처리를 위해 SQL 문을 서버로 보냅니다.
2단계: 서버가 요청한 SQL 문을 구문 분석합니다
1. SQL 계획 캐시 쿼리 분석기를 자주 사용하는 친구는 이 사실을 처음으로 실행하는 경우가 많습니다. 실행하는데 매우 오랜 시간이 걸리지만, 동일한 문을 즉시 실행하거나 일정 시간 내에 실행하면 짧은 시간 안에 쿼리 결과가 반환됩니다.
이유:
서버는 쿼리 요청을 받은 후 즉시 데이터베이스로 이동하여 쿼리하지 않고 데이터베이스의 계획 캐시에 해당 실행 계획이 있는지 확인합니다. 존재하는 경우 컴파일된 실행 계획을 직접 호출하여 실행 계획의 컴파일 시간을 절약합니다.
쿼리된 행이 데이터 버퍼 저장 영역에 이미 존재하는 경우 실제 파일을 쿼리할 필요가 없습니다. 대신 이러한 방식으로 메모리에서 데이터를 가져옵니다. 데이터 버퍼 저장 영역에 대해서는 하드 디스크에서 데이터를 읽는 것보다 훨씬 빠르고 쿼리 효율성도 향상됩니다.
2. SQL 계획 캐시에 해당 실행 계획이 없는 경우 서버는 사용자가 요청한 SQL 문에 대해 먼저 구문 확인을 수행하고 구문 오류가 있는 경우 쿼리를 종료합니다. 작업을 수행하고 이를 호출하는 애플리케이션에 해당 오류 메시지를 반환합니다.
참고: 이때 반환되는 오류 메시지에는 select로 작성된 select 등 기본 구문 오류 정보만 포함됩니다. 오류 메시지에 목록에 없는 열이 포함된 경우 서버는 확인하는 것은 구문 검증뿐이며 의미가 올바른지 여부는 다음 단계로 남겨집니다.
3. 구문이 일치하면 의미가 올바른지 확인합니다. 예를 들어 테이블 이름, 열 이름, 저장 프로시저 등의 데이터베이스 개체가 실제로 존재하는지 확인합니다. 존재하지 않는 것이 있으면 애플리케이션에 오류가 보고되고 쿼리가 종료됩니다.
4. 다음 단계는 객체의 구문 분석 잠금을 획득하는 것입니다. 이는 테이블이 잠겨 있지 않은 경우 먼저 객체를 잠급니다. , 데이터가 삽입되지만 잠금이 없기 때문에 쿼리는 이미 이 레코드를 읽었으며 일부 삽입은 트랜잭션 실패로 인해 롤백되어 더티 읽기 현상이 발생합니다.
5. 다음 단계는 데이터베이스 사용자 권한을 확인하는 것입니다. 이때 데이터베이스 사용자에게 해당 액세스 권한이 없으면 쿼리 결과를 얻지 못할 수 있습니다. 서버가 권한을 보고합니다. 대규모 프로젝트에서는 하나의 프로젝트에 여러 데이터베이스 연결 문자열이 포함되는 경우가 많으며, 일부는 읽기 전용 권한을 갖고 일부는 쓰기 전용 권한을 갖습니다. 읽고 쓸 수 있습니다. 다른 작업에 따라 실행할 다른 사용자를 선택하십시오. 주의를 기울이지 않으면 SQL 문이 아무리 완벽해도 쓸모가 없습니다.
6. 분석의 마지막 단계는 최종 실행 계획을 결정하는 것입니다. 구문, 의미 및 권한이 모두 확인되면 서버는 결과를 즉시 반환하지 않고 대신 SQL을 최적화하고 다른 쿼리 알고리즘을 선택하여 가장 효율적인 형식으로 애플리케이션에 반환합니다. 예를 들어, 테이블 조인트 쿼리를 수행할 때 서버는 비용, 어떤 인덱스가 더 효율적인지 등에 따라 최종적으로 hashjoin, mergejoin 또는 loopjoin을 사용하기로 결정합니다. 그러나 효율적인 쿼리를 작성하기 위해 자동화된 최적화는 제한됩니다. SQL은 여전히 자체 SQL 쿼리 문을 최적화해야 합니다.
실행 계획이 결정되면 실행 계획이 SQL 계획 캐시에 저장됩니다. 다음에 동일한 실행 요청이 있을 때 실행 계획을 다시 컴파일하지 않도록 계획 캐시에서 직접 가져옵니다.
3단계: 명령문 실행
서버는 SQL 문의 구문 분석을 완료한 후 해당 문의 내용이 무엇을 의미하는지 알게 되고 실제로 SQL 문을 실행하게 됩니다.
이때는 두 가지 상황이 있습니다.
쿼리문에 포함된 데이터 행을 데이터 버퍼 저장 영역으로 읽어 들인 경우 서버는 데이터 버퍼에서 데이터를 직접 읽습니다. 저장 영역을 저장하고 애플리케이션으로 반환하여 실제 파일에서 읽는 것을 방지하여 쿼리 속도를 향상시킵니다.
데이터 행이 데이터 버퍼에 없는 경우 실제 파일에서 레코드를 읽어 애플리케이션에 반환하고, 다음 사용을 위해 데이터 행을 데이터 버퍼에 기록합니다.
참고: SQL 캐시에는 여러 유형이 있습니다. 여기에 관심이 있는 친구는 검색할 수 있습니다. 때로는 캐시의 존재로 인해 두 번째로 최적화 결과를 즉시 확인하기가 어렵습니다. 실행에는 캐시가 있으므로 속도가 매우 빠르므로 일반적으로 먼저 캐시를 제거한 다음 최적화 전후의 성능을 비교해야 합니다.
DBCCDROPCLEANBUFFERS
버퍼 풀에서 모두 삭제 버퍼를 지웁니다.
DBCCFREEPROCCACHE
프로시저 캐시에서 모든 요소를 제거합니다.
DBCCFREESYSTEMCACHE
모든 캐시에서 사용되지 않은 캐시 항목을 모두 해제합니다. SQLServer2005 데이터베이스 엔진은 백그라운드에서 사용되지 않는 캐시 항목을 미리 정리하여 현재 항목에 사용할 수 있는 메모리를 만듭니다. 그러나 이 명령을 사용하면 모든 캐시에서 사용되지 않는 항목을 수동으로 제거할 수 있습니다.
이것은 기본적으로 SQL 캐시의 영향을 제거할 수 있을 뿐입니다. 캐시를 완전히 제거할 수 있는 해결책은 없는 것 같습니다.
결론: 서비스 실행 애플리케이션에서 제출한 SQL의 연산 과정을 알아야만 애플리케이션을 잘 디버깅할 수 있다.
SQL 구문이 올바른지 확인하세요.
SQL 의미가 올바른지, 즉 개체가 존재하는지 확인하세요.
데이터베이스 사용자에게 해당 액세스 권한이 있는지 확인하세요. 진상.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











SQL Server에서 SQL 문을 사용하여 테이블을 만드는 방법 : SQL Server Management Studio를 열고 데이터베이스 서버에 연결하십시오. 테이블을 만들려면 데이터베이스를 선택하십시오. 테이블 이름, 열 이름, 데이터 유형 및 제약 조건을 지정하려면 테이블 작성 문을 입력하십시오. 실행 버튼을 클릭하여 테이블을 만듭니다.

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) 데이터베이스 및 테이블 작성 : CreateAbase 및 CreateTable 명령을 사용하십시오. 2) 기본 작업 : 삽입, 업데이트, 삭제 및 선택. 3) 고급 운영 : 가입, 하위 쿼리 및 거래 처리. 4) 디버깅 기술 : 확인, 데이터 유형 및 권한을 확인하십시오. 5) 최적화 제안 : 인덱스 사용, 선택을 피하고 거래를 사용하십시오.

이 기사에서는 SQL 문을 사용하여 3 개의 테이블에 가입하는 것에 대한 자세한 자습서를 소개합니다. 독자는 다른 테이블의 데이터를 효과적으로 상관시키는 방법을 배우도록 독자를 안내합니다. 예제 및 세부 구문 설명을 통해이 기사를 사용하면 SQL에서 테이블의 결합 기술을 마스터하여 데이터베이스에서 관련 정보를 효율적으로 검색 할 수 있습니다.

SQL 삽입 문은 데이터를 테이블에 삽입하는 데 사용됩니다. 단계에는 다음이 포함됩니다. 삽입 할 열을 나열하려면 대상 테이블을 지정하십시오. 삽입 할 값을 지정합니다 (값 순서는 열 이름에 해당해야합니다).

SQL 주입을 판단하는 방법에는 의심스러운 입력 감지, 원래 SQL 문보기, 탐지 도구 사용, 데이터베이스 로그보기 및 침투 테스트 수행이 포함됩니다. 주입이 감지 된 후에는 패치 취약점에 대한 조치를 취하고 패치를 확인하고 정기적으로 모니터링하며 개발자 인식을 향상시킵니다.

MySQL 및 SQL은 개발자에게 필수적인 기술입니다. 1.MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템이며 SQL은 데이터베이스를 관리하고 작동하는 데 사용되는 표준 언어입니다. 2.MYSQL은 효율적인 데이터 저장 및 검색 기능을 통해 여러 스토리지 엔진을 지원하며 SQL은 간단한 문을 통해 복잡한 데이터 작업을 완료합니다. 3. 사용의 예에는 기본 쿼리 및 조건 별 필터링 및 정렬과 같은 고급 쿼리가 포함됩니다. 4. 일반적인 오류에는 구문 오류 및 성능 문제가 포함되며 SQL 문을 확인하고 설명 명령을 사용하여 최적화 할 수 있습니다. 5. 성능 최적화 기술에는 인덱스 사용, 전체 테이블 스캔 피하기, 조인 작업 최적화 및 코드 가독성 향상이 포함됩니다.

PostgreSQL 열을 추가하는 메소드는 Alter Table 명령을 사용하고 다음 세부 사항을 고려하는 것입니다. 데이터 유형 : int 또는 Varchar와 같은 새 열이 데이터를 저장하는 데 적합한 유형을 선택하십시오. 기본값 : 기본 키워드를 통해 새 열의 기본값을 지정하여 NULL 값을 피하십시오. 제약 조건 : 필요에 따라 Null, 고유 한 또는 확인 제약 조건을 확인하십시오. 동시 작업 : 열을 추가 할 때 트랜잭션 또는 기타 동시성 제어 메커니즘을 사용하여 잠금 충돌을 처리합니다.

백업 또는 트랜잭션 롤백 메커니즘이없는 한 데이터베이스에서 직접 삭제 된 행 복구는 일반적으로 불가능합니다. 키 포인트 : 거래 롤백 : 트랜잭션이 데이터를 복구하기 전에 롤백을 실행합니다. 백업 : 데이터베이스의 일반 백업을 사용하여 데이터를 신속하게 복원 할 수 있습니다. 데이터베이스 스냅 샷 : 데이터베이스의 읽기 전용 사본을 작성하고 데이터를 실수로 삭제 한 후 데이터를 복원 할 수 있습니다. 주의해서 삭제 명령문을 사용하십시오. 실수로 데이터를 삭제하지 않도록 조건을주의 깊게 점검하십시오. WHERE 절을 사용하십시오 : 삭제할 데이터를 명시 적으로 지정하십시오. 테스트 환경 사용 : 삭제 작업을 수행하기 전에 테스트하십시오.
