찾다
데이터 베이스SQLSQL 쿼리를 최적화하는 방법은 무엇입니까? (상해)

SQL 쿼리를 최적화하는 방법은 무엇입니까? (상해)

최적화해야 하는 이유

시스템의 처리량 병목 현상 종종 나타나는 데이터베이스의 액세스 속도 측면에서, 즉 애플리케이션이 실행될수록 데이터베이스에 점점 더 많은 데이터가 있게 되고 그에 따라 처리 시간도 느려지게 됩니다. 게다가 데이터가 디스크에 저장됩니다. 읽기 및 쓰기 속도는 메모리의 속도와 비교할 수 없습니다.

최적화 방법

1. 데이터베이스 테이블 및 필드, 스토리지 엔진

2 , 인덱스, 문장 작성 최적화

3, MySQL 클러스터 등 MySQL 자체에서 제공하는 기능을 잘 활용하세요. 하위 데이터베이스와 하위 테이블, 읽기-쓰기 분리

SQL 문에 대하여 네트워크는 최적화 방법에 대한 많은 경험을 가지고 있으므로 이 기사에서는 이러한 것을 제쳐두고 DAO 계층 최적화 및 데이터베이스 설계 최적화 및 두 가지 간단한 예 나열

예 1: ERP쿼리 최적화

현재 상황 분석 :

1. 연결 인덱스 부족
2. Mysql 자체의 성능이 제한되어 있으며 현재 성능은 주로 목록 쿼리에 중점을 두고 있습니다. 여러 테이블과 연관되어 있음

대책: #1 필요한 인덱스 추가: explain을 통해 실행 기록을 보고, 실행 계획에 따라 인덱스를 추가합니다.

2 먼저 기본을 계산합니다. 비즈니스 데이터의 기본 테이블의 키를 사용하여 더 작은 결과 집합을 얻은 다음 결과 집합을 사용하여 관련 쿼리를 수행합니다.

1) 먼저 기본 테이블과 조건을 기반으로 비즈니스 데이터의 기본 키를 쿼리하고 표시합니다.
2) 기본 키를 쿼리 조건으로 사용하고, 이를 다른 관련 테이블과 연결하여 필요한 비즈니스 필드를 쿼리합니다.
3) 메인 테이블을 쿼리할 때 연결해야 하는 쿼리 조건에 대해 이 조건을 설정해야만 테이블 연관 설정이 가능합니다. 🎜🎜#목록 쿼리의 조건은 일반적으로 기본 테이블에 연결되므로 이러한 최적화가 적합합니다. 이는 키 필드 인덱스를 설정하는 동시에 쿼리 조건의 제한을 통해 기본 테이블을 크게 줄입니다. 이런 식으로 다른 테이블을 연관시킬 때 훨씬 더 빨라질 것입니다

예 2: 기사 검색 최적화

Tieba를 하고 싶다고 가정해 보세요 기사 검색 기능 중 가장 간단하고 직접적인 저장 구조는 관계형 데이터베이스를 사용하여 기사를 저장하는 관계형 데이터베이스 테이블 TT_ARTICLES를 만드는 것입니다.

그런 다음 , 현재 검색 키워드는 "target"이고 문자열 일치를 사용하여 CONTENT 열에서 일치 쿼리를 수행할 수 있습니다.

例如 有如下表 TT_A   TT_B    TT_C  TT_D

假设未优化前的SQL是这样的

SELECT
    A.ID,
    ....
    B.NAME,
    .....
    C.AGE,
    ....
    D.SEX
    .....

FROM  TT_A A
LEFT JOIN TT_B B ON A.ID  = B.ITEM_ID
LEFT JOIN TT_C C ON B.ID = C.ITEM_ID
LEFT JOIN TT_D D ON C.ID = D.ITEM_ID
WHERE 1=1AND A.XX = ?AND A.VV = ?.....

那么优化后的SQL是

第一步

SELECT
    A.ID

FROM  TT_A A
WHERE 1=1AND A.XX = ?AND A.VV = ?第二步

SELECT
    A.ID,
    ....
    B.NAME,
    .....
    C.AGE,
    ....
    D.SEX
    .....
FROM  ( SELECT A.ID,..... FROM  TT_A  WHERE ID IN (1,2,3..)  ) A
LEFT JOIN TT_B B ON A.ID  = B.ITEM_ID
LEFT JOIN TT_C C ON B.ID = C.ITEM_ID
LEFT JOIN TT_D D ON C.ID = D.ITEM_ID
WHERE 1=1AND A.XX = ?AND A.VV = ?
이것은 검색 기능을 쉽게 구현합니다. 그러나 이 접근 방식에는 명백한 문제가 있습니다. 즉, 문자열 일치에 %를 사용하는 것은 매우 비효율적이므로 이러한 쿼리는 전체 테이블을 순회해야 합니다(전체 테이블 스캔). 기사가 몇 개, 수십 개라면 문제가 되지 않지만, 기사가 수십만, 수백만 개라면 이 방법은 전혀 불가능하다. 단일 관계형 데이터베이스 테이블이 이러한 대용량 데이터를 수용할 수 없다는 점은 말할 것도 없고, 이를 스캔해야 한다면 여기서 소요되는 시간은 상상조차 할 수 없습니다.

그래서 우리는 '역인덱스' 기술이 도입됐다. 위에서 설명한 시나리오에서는 이 개념을 두 부분으로 나누어 설명할 수 있습니다. 위의 ARTICLES 테이블은 여전히 ​​존재하지만 이제 키워드 테이블 KEYWORDS를 추가해야 하며 KEYWORD 열을 인덱싱해야 합니다.

물론 KEYWORDS 테이블과 KEYWORD_ID 및 ARTICLE_ID 테이블을 결합하는 관계 테이블도 필요합니다. 공동 기본 키로 사용


보시다시피 이것은 실제로 다대다 관계입니다. 즉, 동일한 키워드가 여러 기사에 나타날 수 있습니다. , 기사에는 여러 개의 서로 다른 키워드가 포함될 수 있습니다. 이러한 방식으로 먼저 색인된 키워드를 기반으로 KEYWARDS 테이블에서 해당 KEYWORD_ID를 찾은 다음 위의 연관 테이블을 기반으로 ARTICLE_ID를 찾은 다음 이를 사용하여 ARTICLES 테이블에서 해당 기사를 찾을 수 있습니다.

요약:

3회 검색인 것 같은데 매번 인덱스를 사용하기 때문에 전체 테이블 스캔은 생략됩니다. 데이터의 양이 적고, 속도도 느리지 않으며, SQL을 사용하여 구현하면 이 과정을 SQL 문에 완벽하게 담을 수 있다. 데이터의 양이 적을 경우 위의 방법으로 충분합니다. 이는 전체 테이블 스캔 및 문자열 % 일치 쿼리로 인해 발생하는 성능 문제를 해결합니다.

요약:

기술면접 중 실제 사례를 들려주실 수 있거나 개발과정에서 발생하는 문제점에 대해 직접 이야기해주실 수 있다면 면접 내용은 추가하겠습니다. 포인트와 이득이 많으며 답변은 더 논리적이어야 합니다. 여기 저기로 이동하면 쉽게 혼란스러울 수 있습니다. 예를 들어 SQL을 최적화하는 방법에 대한 질문에 인덱스 추가에 대해 직접적으로 대답하면 안 됩니다.

안녕하세요 면접관님, 우선 저희 프로젝트 DB 데이터 볼륨에 병목 현상이 발생하여 목록 쿼리가 매우 느려지고 사용자에게 나쁜 경험을 안겨주었습니다. 이 문제를 해결하기 위해 가장 기본적인 데이터베이스 등 다양한 방법이 있습니다. 테이블 설계, 기본 SQL 최적화, MYSQL 클러스터링, 읽기-쓰기 분리, 하위 데이터베이스와 하위 테이블, 아키텍처에 캐시 레이어 추가 등의 장단점... 이를 바탕으로 의 특성과 결합 우리 프로젝트, 기술 선정 시 누구를 선택했나요?

이렇게 질서정연하게 질문에 대답하고, 질문 외의 지식도 많이 이야기하면 면접관은 당신이 코드만 잘 쓰는 사람이 아니라 논리가 명확한 사람이라고 생각할 것입니다. 그리고 기술 선택에 대한 올바른 이해, 자신만의 이해와 생각을 가지세요

이 기사는 SQL Tutorial 칼럼에서 가져온 것입니다. 환영합니다!

위 내용은 SQL 쿼리를 최적화하는 방법은 무엇입니까? (상해)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 cnblogs에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
MySQL 및 SQL : 데이터 관리에서의 역할MySQL 및 SQL : 데이터 관리에서의 역할Apr 30, 2025 am 12:07 AM

MySQL은 데이터베이스 시스템이며 SQL은 데이터베이스를 작동하는 언어입니다. 1. MYSQL은 데이터를 저장하고 관리하고 구조화 된 환경을 제공합니다. 2. SQL은 데이터를 쿼리, 업데이트 및 삭제하며 다양한 쿼리 요구를 유연하게 처리하는 데 사용됩니다. 그들은 함께 일하며 성능과 디자인을 최적화하는 것이 중요합니다.

SQL 및 MySQL : 데이터 관리에 대한 초보자 안내서SQL 및 MySQL : 데이터 관리에 대한 초보자 안내서Apr 29, 2025 am 12:50 AM

SQL과 MySQL의 차이점은 SQL이 관계형 데이터베이스를 관리하고 운영하는 데 사용되는 언어이며 MySQL은 이러한 작업을 구현하는 오픈 소스 데이터베이스 관리 시스템입니다. 1) SQL을 사용하면 사용자가 CreateTable, Insert, Select 등과 같은 명령을 통해 데이터를 정의, 작동 및 쿼리하고 구현할 수 있습니다. 2) RDBMS로서 MySQL은 이러한 SQL 명령을 지원하고 고성능 및 신뢰성을 제공합니다. 3) SQL의 작동 원리는 관계형 대수를 기반으로하며 MySQL은 쿼리 최적화기 및 인덱스와 같은 메커니즘을 통해 성능을 최적화합니다.

SQL의 핵심 기능 : 정보 쿼리 및 검색SQL의 핵심 기능 : 정보 쿼리 및 검색Apr 28, 2025 am 12:11 AM

SQL 쿼리의 핵심 기능은 선택 문을 통해 데이터베이스에서 정보를 추출, 필터링 및 정렬하는 것입니다. 1. 기본 사용법 : Select를 사용하여 SelectName, Department -Fromegloyees와 같은 테이블의 특정 열을 쿼리하십시오. 2. 고급 사용 : 하위 쿼리와 Orderby를 결합하여 평균 이상의 급여를받는 직원을 찾아 내림차순으로 정렬하는 것과 같은 복잡한 쿼리를 구현합니다. 3. 디버깅 기술 : 구문 오류를 확인하고 소규모 데이터를 사용하여 논리 오류를 확인하고 설명 명령을 사용하여 성능을 최적화하십시오. 4. 성능 최적화 : 인덱스 사용, 선택*을 피하고 하위 쿼리를 사용하고 합리적으로 조인하여 쿼리 효율성을 향상시킵니다.

SQL : 데이터베이스의 언어가 설명되었습니다SQL : 데이터베이스의 언어가 설명되었습니다Apr 27, 2025 am 12:14 AM

SQL은 데이터베이스를 쿼리, 작동 및 관리하는 데 사용되는 데이터베이스 작업의 핵심 도구입니다. 1) SQL을 사용하면 데이터 쿼리, 작업, 정의 및 제어를 포함하여 CRUD 작업을 수행 할 수 있습니다. 2) SQL의 작동 원리에는 구문 분석, 최적화 및 실행의 세 단계가 포함됩니다. 3) 기본 사용에는 테이블 작성, 삽입, 쿼리, 업데이트 및 삭제가 포함됩니다. 4) 고급 사용 커버 조인, 하위 쿼리 및 창 함수. 5) 일반적인 오류에는 구문, 논리 및 성능 문제가 포함되며, 데이터베이스 오류 정보를 통해 디버깅 할 수 있으며, 쿼리 로직을 확인하고 설명 명령을 사용합니다. 6) 성능 최적화 팁에는 인덱스 생성, 선택* 피하기* 및 조인 사용이 포함됩니다.

SQL : 학습 장애물을 극복하는 방법SQL : 학습 장애물을 극복하는 방법Apr 26, 2025 am 12:25 AM

SQL 전문가가 되려면 다음 전략을 마스터해야합니다. 1. 테이블, 행, 열 및 색인과 같은 데이터베이스의 기본 개념을 이해하십시오. 2. 구문 분석, 최적화 및 실행 프로세스를 포함하여 SQL의 핵심 개념과 작업 원칙을 배우십시오. 3. CRUD, 복잡한 쿼리 및 창 함수와 같은 기본 및 고급 SQL 작업에 능숙합니다. 4. 마스터 디버깅 기술 및 설명 명령을 사용하여 쿼리 성능을 최적화하십시오. 5. 학습 자원을 활용하고 성과 최적화에 중요성을 부여하고 호기심을 유지하는 연습을 통해 학습 과제를 극복합니다.

SQL 및 데이터베이스 : 완벽한 파트너십SQL 및 데이터베이스 : 완벽한 파트너십Apr 25, 2025 am 12:04 AM

SQL과 데이터베이스의 관계는 밀접하게 통합되었으며 SQL은 데이터베이스를 관리하고 운영하는 도구입니다. 1.SQL은 데이터 정의, 작동, 쿼리 및 제어에 사용되는 선언적 언어입니다. 2. 데이터베이스 엔진은 SQL 문을 구문 분석하고 쿼리 계획을 실행합니다. 3. 기본 사용에는 테이블 작성, 삽입 및 쿼리가 포함됩니다. 4. 고급 사용에는 복잡한 쿼리와 하위 쿼리가 포함됩니다. 5. 일반적인 오류에는 구문, 논리 및 성능 문제가 포함되며, 구문 검사 및 설명 명령을 통해 디버깅 할 수 있습니다. 6. 최적화 기술에는 인덱스 사용, 전체 테이블 스캔을 피하고 쿼리 최적화가 포함됩니다.

SQL vs. MySQL : 둘 사이의 관계를 명확히합니다SQL vs. MySQL : 둘 사이의 관계를 명확히합니다Apr 24, 2025 am 12:02 AM

SQL은 관계형 데이터베이스를 관리하는 표준 언어이며 MySQL은 SQL을 사용하는 데이터베이스 관리 시스템입니다. SQL은 CRUD 작업을 포함한 데이터베이스와 상호 작용하는 방법을 정의하는 반면 MySQL은 SQL 표준을 구현하고 저장 프로 시저 및 트리거와 같은 추가 기능을 제공합니다.

SQL의 중요성 : 디지털 시대의 데이터 관리SQL의 중요성 : 디지털 시대의 데이터 관리Apr 23, 2025 am 12:01 AM

데이터 관리에서 SQL의 역할은 쿼리, 삽입, 업데이트 및 삭제를 통해 데이터를 효율적으로 처리하고 분석하는 것입니다. 1.SQL은 사용자가 구조화 된 방식으로 데이터베이스와 대화 할 수있는 선언적 언어입니다. 2. 사용 예제에는 기본 선택 쿼리 및 고급 조인 작업이 포함됩니다. 3. WHERE 절을 잊거나 오용 조인 가입과 같은 일반적인 오류는 설명 명령을 통해 디버깅 할 수 있습니다. 4. 성능 최적화에는 인덱스 사용 및 코드 가독성 및 유지 관리와 같은 모범 사례가 포함됩니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.