90%프로그래머 면접 에서 발생 하 는 색인 최적화 문제

머리말
본 고 는 90%프로그래머 면접 에 사용 할 수 있 는 색인 최적화 를 공유 하 였 으 며,색인 기본 원리 와 색인 생 성 원칙 은 중점 이 며,면접 은 기본적으로 필수 입 니 다!여러분 들 은 많은 이해 와 이 해 를 소장 할 수 있 습 니 다.다음은 상세 한 소 개 를 함께 살 펴 보 겠 습 니 다.
색인 에 대해 서 는 다음 과 같은 몇 가지 로 나 누 어 설명 합 니 다.
  • 색인 에 대한 개술(색인 이 무엇 인지,색인 의 장단 점)
  • 색인 의 기본 사용(색인 생 성)
  • 색인 의 기본 원리(면접 중점)색인 데이터 구조(B 트 리,hash)4.567917.색인 을 만 드 는 원칙(중요 한 것 은 면접 필수!소장 하 시기 바 랍 니 다!)4.567917.백만 등급 또는 이상 의 데 이 터 를 어떻게 삭제 합 니까?
    색인
    1)색인 이란 무엇 입 니까?
    색인 은 특수 한 파일(InnoDB 데이터 시트 의 색인 은 표 공간의 구성 부분)로 데이터 시트 의 모든 기록 에 대한 참조 지침 을 포함 하고 있다.더 쉽게 말 하면 색인 은 목록 에 해당 한다.당신 이 신화 사전 을 사용 할 때 목록 을 찢 어 주 었 습 니 다.어떤 글자 의 시작 성 어 를 조회 하면 첫 페이지 에서 천 페이지 까지 만 넘 길 수 있 습 니 다.지치다목록 을 돌려 주면 빠르게 찾 을 수 있 습 니 다!
    2)색인 의 장단 점:
    데이터 검색 속 도 를 크게 가속 화 할 수 있 는 것 도 색인 을 만 드 는 가장 주요 한 원인 이다.또한 색인 을 사용 하여 조회 하 는 과정 에서 최적화 숨 김 기 를 사용 하여 시스템 의 성능 을 향상 시 킬 수 있 습 니 다.그러나 색인 도 단점 이 있 습 니 다.색인 은 추가 적 인 유지 비용 이 필요 합 니 다.색인 파일 은 단독으로 존재 하 는 파일 이기 때문에 데이터 의 증가,수정,삭 제 는 색인 파일 에 대한 추가 작업 이 발생 할 수 있 습 니 다.이러한 작업 은 추가 적 인 IO 를 소모 하여 증가/수정/삭제 의 집행 효율 을 낮 출 수 있 습 니 다.
    2.색인 의 기본 사용(진짜 기술 문)
    1)색인 생 성:(세 가지 방식)
    첫 번 째 방법:

    두 번 째 방법:ALTER TABLE 명령 을 사용 하여 색인 을 추가 합 니 다.
    ALTER TABLE 은 일반 색인,UNIQUE 색인 또는 PRIMARY KEY 색인 을 만 드 는 데 사 용 됩 니 다.

    그 중 tablename 은 색인 을 추가 할 표 이름 입 니 다.columnlist 는 어떤 열 을 색인 하고 여러 열 을 표시 할 때 각 열 간 에 쉼표 로 구분 하 는 지 알려 줍 니 다.
    색인 명 indexname 은 스스로 이름 을 지 을 수 있 습 니 다.부족 할 때 MySQL 은 첫 번 째 색인 열 에 따라 이름 을 지정 합 니 다.또한,ALTER TABLE 은 하나의 구문 에서 여러 개의 표를 변경 할 수 있 기 때문에 여러 개의 색인 을 동시에 만 들 수 있 습 니 다.
    세 번 째 방법:CREATE INDEX 명령 으로 만 들 기
    CREATE INDEX 는 표 에 일반 색인 이나 UNIQUE 색인 을 추가 할 수 있 습 니 다.(단,PRIMARY KEY 인덱스 를 만 들 수 없습니다)

    3.색인 의 기본 원리(다른 문장 처럼 쓸데없는 말 을 많이 하고 싶 지 않다)
    색인 은 특정 값 을 가 진 기록 을 빠르게 찾 는 데 쓰 인 다.색인 이 없 으 면,일반적으로 검색 을 실행 할 때 표 전 체 를 옮 겨 다 닌 다.
    색인 의 원 리 는 매우 간단 하 다.바로 무질서 한 데 이 터 를 질서 있 는 조회 로 바 꾸 는 것 이다.
          1.색인 을 만 든 열의 내용 을 정렬 합 니 다.
          2.정렬 결과 에 대한 역 배열 표 생 성
          3.후진 표 내용 에 데이터 주소 체인 을 붙인다.
          4.조회 할 때 후진 표 내용 을 받 은 다음 에 데이터 주소 체인 을 추출 하여 구체 적 인 데 이 터 를 얻는다.
    4.색인 데이터 구조(b 트 리,hash)
    1)B 트 리 인덱스
    mysql 은 저장 엔진 을 통 해 데 이 터 를 가 져 옵 니 다.기본적으로 90%가 InnoDB 를 사용 합 니 다.실현 방식 에 따라 InnoDB 의 색인 유형 은 현재 두 가지 만 있 습 니 다.BTREE(B 트 리)색인 과 HASH 색인 입 니 다.B 트 리 색인 은 Mysql 데이터베이스 에서 가장 자주 사용 되 는 색인 형식 으로 기본 모든 저장 엔진 은 BTree 색인 을 지원 합 니 다.일반적으로 우리 가 말 하 는 색인 은 의외로(B 트 리)색인(실제 B+트 리 로 이 루어 집 니 다.표 색인 을 볼 때 my sql 은 모두 BTREE 를 인쇄 하기 때문에 B 트 리 색인 이 라 고 부 릅 니 다)을 말 합 니 다.

    조회 방법:
    홈 키 색인 영역:PI(저 장 된 데이터 와 연 결 된 주소)는 홈 키 로 조회 합 니 다.
    일반 색인 영역:si(연 결 된 id 의 주소,그리고 위 에 있 는 주소).그래서 메 인 키 를 누 르 면 조회 속도 가 가장 빠르다.
    B+tree 성질:
    1.n 그루 tree 의 노드 는 n 개의 키 워드 를 포함 하고 데 이 터 를 저장 하지 않 고 데 이 터 를 저장 하 는 색인 을 포함 합 니 다.
    2.모든 잎 사 귀 결점 에는 모든 키워드 의 정보 와 이 키 워드 를 포함 한 기록 을 가리 키 는 지침 이 포함 되 어 있 으 며,잎 사 귀 결점 자 체 는 키워드 의 크기 에 따라 작 지만 큰 순서 로 링크 되 어 있다.
    3.모든 비 터미널 노드 는 색인 부분 으로 볼 수 있 으 며,노드 에는 하위 트 리 의 최대(또는 최소)키워드 만 포함 되 어 있 습 니 다.
    4.B+트 리 에서 데이터 대상 의 삽입 과 삭 제 는 잎 노드 에서 만 이 루어 집 니 다.
    5.B+나 무 는 두 개의 머리핀 이 있 고 하 나 는 나무의 뿌리 노드 이 며 하 나 는 가장 작은 관건 코드 의 잎 노드 이다.
    2)해시 색인(좋 은 기술 문)
    요약 하면 데이터 구조 에서 간단하게 실 현 된 HASH 표(산 목록)와 같이 우리 가 my sql 에서 해시 색인 을 사용 할 때 주로 Hash 알고리즘(흔히 볼 수 있 는 Hash 알고리즘 은 직접 주소 지정 법,제곱 취 중 법,접 기 법,나 누 기 여가 법,랜 덤 수법)을 통 해 데이터 베이스 필드 데 이 터 를 정 해진 Hash 값 으로 변환 합 니 다.이 데이터 의 줄 포인터 와 Hash 표 의 대응 위 치 를 함께 저장 합 니 다.Hash 충돌 이 발생 하면(두 키워드 의 Hash 값 이 같 음)대응 하 는 Hash 키 아래 링크 로 저 장 됩 니 다.물론 이 건 간략 한 시 뮬 레이 션 그림 일 뿐이다.

    ps:데이터 구조 에 대해 관심 이 있 는 친 구 는 저 를 주목 한 후에[데이터 구조]주 제 를 볼 수 있 습 니 다.여 기 는 상세 한 설명 을 하지 않 습 니 다.
    5.색인 생 성 원칙(중요)
    색인 은 좋 지만 무제 한 사용 은 아니 므 로 몇 가지 원칙 에 부합 하 는 것 이 좋 습 니 다.
    1)가장 왼쪽 접두사 일치 원칙,조합 색인 은 매우 중요 한 원칙 입 니 다.my sql 은 범위 조회(>,<,between,like)를 만 날 때 까지 오른쪽 으로 일치 합 니 다.예 를 들 어 a=1 and b=2 and c>3 and d=4(a,b,c,d)순서 의 색인 을 만 들 면 d 는 색인 을 사용 하지 않 습 니 다.(a,b,d,c)의 색인 을 만 들 면 모두 사용 할 수 있 습 니 다.a,b,d 의 순 서 는 임의로 조정 할 수 있다.
    2)검색 조건 의 필드 로 자주 색인 을 만 듭 니 다.
    3)잦 은 필드 를 업데이트 하 는 것 은 색인 을 만 드 는 데 적합 하지 않 습 니 다.
    4)데 이 터 를 효과적으로 구분 하지 못 하 는 열 은 색인 열 에 적합 하지 않다(예 를 들 어 성별,남녀 가 알 수 없 으 면 최대 세 가지 로 구분 도가 너무 낮다)
    5)가능 한 한 색인 을 확장 하고 새 색인 을 만 들 지 마 십시오.예 를 들 어 표 에 a 의 색인 이 있 는데 지금(a,b)의 색인 을 추가 하려 면 원래 의 색인 만 수정 하면 됩 니 다.
    6)외부 키 가 있 는 데이터 열 을 정의 하려 면 반드시 색인 을 만들어 야 한다.
    7)검색 에 언급 되 지 않 은 열 에 대해 서 는 중복 값 이 많은 열 에 색인 을 만 들 지 마 십시오.
    8)text,image,bit 로 정 의 된 데이터 형식의 열 에 색인 을 만 들 지 마 십시오.
    백만 레벨 이상 의 데 이 터 를 어떻게 삭제 합 니까?
    색인 에 대하 여:색인 은 추가 적 인 유지 비용 이 필요 합 니 다.색인 파일 은 단독으로 존재 하 는 파일 이기 때문에 데이터 의 증가,수정,삭제 에 대해 추가 적 인 색인 파일 작업 이 발생 합 니 다.이러한 작업 은 추가 적 인 IO 를 소모 하여 증가/수정/삭제 의 실행 효율 을 낮 출 수 있 습 니 다.따라서 데이터베이스 백만 급 데 이 터 를 삭제 할 때 MySQL 공식 매 뉴 얼 을 조회 하여 데 이 터 를 삭제 하 는 속도 와 만 든 색인 수량 이 정비례 한 다 는 것 을 알 게 되 었 습 니 다.
    4.567917.그래서 백만 데 이 터 를 삭제 하려 면 색인 을 먼저 삭제 할 수 있 습 니 다.
    4.567917.그리고 그 중의 쓸모없는 데 이 터 를 삭제 합 니 다(이 과정 은 2 분 이 걸 리 지 않 습 니 다)4.567917.삭제 가 완료 되면 색인 을 다시 만 듭 니 다(이때 데이터 가 적 습 니 다).색인 을 만 드 는 것 도 매우 빠 르 고 약 10 분 정도 걸 립 니 다4.567917.이전 과 직접 삭제 하 는 것 은 매우 빠 르 고 삭제 가 중단 되면 모든 삭제 가 다시 굴 러 갈 것 이다.그것 은 더욱 함정 이다상용 데이터베이스 인덱스 최적화 문
    다음 표 tb 사용test 는 예시 로 설명 한다.
    
    create table tb_test
    (
    id int not null,
    age int not null, 
    name varchar(30) not null,
    addr varchar(50) not null
    );
    create unique index idx1_tb_test on tb_test(id);
    create index idx2_tb_test on tb_test(name);
    create index idx3_tb_test on tb_test(addr);
    색인 최적화 제안
    1.색인 열 계산 하기
    예 를 들 어,우 리 는 시 계 를 tbtest 에서 id 가 100 이상 인 데이터 기록 의 age 와 name 을 찾 습 니 다.
    정확 한 SQL 문 구 는:
    
    select age,name from tb_test where id > 1*100;
    권장 하지 않 는 SQL 문 구 는:
    
    select age,name from tb_test where id/100 > 1;
    2.색인 열 맞 추기
    예 를 들 어,우 리 는 시 계 를 tbtest 에서 name 은"zhou"이 고 addr 는"CQ"의 기록 에 있 는 id 와 age 를 찾 습 니 다.
    정확 한 SQL 문 구 는:
    
    select id,age from tb_test where name='zhou' and addr='CQ';
    권장 하지 않 는 SQL 문 구 는:
    
    select id,age from tb_test where concat(name,' ‘,addr) = ‘zhou CQ';
    3.색인 열 에 is null 또는 is not null 사용
    예 를 들 어,우 리 는 시 계 를 tbtest 에서 id 가'0'과 같은 기록 중의 age 를 찾 습 니 다.
    정확 한 SQL 문 구 는:
    
    select age from tb_test where id >= 0;
    권장 하지 않 는 SQL 문 구 는:
    
    select age from tb_test where id is not null;
    4.색인 열 에서 or 의 사용
    예 를 들 어,우 리 는 시 계 를 tbtest 에서 id 는 101 또는 102 의 기록 에 있 는 age 와 name 을 찾 습 니 다.
    정확 한 SQL 문장(union 사용)은:
    
    select age,name from tb_test where id = 101 union select age,name from tb_test where id = 102;
    권장 하지 않 는 SQL 구문(or 사용)은:
    
    select age,name from tb_test where id = 101 or id = 102;
    5.like 의 첫 글자 에 색인 이 연결 되 어 있 는 것 을 피 합 니 다.
    예 를 들 어,우 리 는 시 계 를 tbtest 에서 name 이"zho"와 일치 하 는 기록 의 id 와 age 를 찾 습 니 다.
    정확 한 SQL 문 구 는:
    
    select id,age from tb_test where name like ‘zho%';
    권장 하지 않 는 SQL 문 구 는:
    
    select id,age from tb_test where name like ‘%ho%';
    6.복합 색인 사용
    우리 가 만 든 색인 이 복합 색인 이 라면 이 색인 의 첫 번 째 필드 를 조건 으로 사용 해 야 시스템 이 이 색인 을 사용 할 수 있 습 니 다.
    예 를 들 어,우 리 는 tbtest 에 다음 색인 을 새로 만 들 었 습 니 다:
    
    create index idx4_tb_test on tb_test(id,name,addr);
    이상 색인 idx 4tb_test 는 index(id),index(id,name),index(id,name,addr)세 개의 색인 을 만 든 것 과 같다.SQL 문장의 where 조건 에서 name 이나 addr 를 단독으로 사용 할 때 이 색인 을 사용 하지 않 습 니 다.id 를 사용 해 야 이 색인 을 사용 할 수 있 습 니 다.
    우리 가 작성 한 SQL 구문 에서 색인 열 을 잘못 사용 하면 색인 이 사용 되 지 않 고 전체 표 스 캔 을 하여 데이터 뱅 크 의 성능 을 크게 떨 어 뜨 릴 수 있 습 니 다.따라서 정확 한 색인 사용 방법 을 배 우 는 것 이 필요 하 다.
    오늘 색인 에 대한 설명 은 여기까지 입 니 다.색인 기본 원리 와 색인 생 성 원칙 은 중점 입 니 다.면접 은 기본적으로 물 어 봐 야 합 니 다!여러분 들 은 많은 이해 와 이 해 를 소장 할 수 있 습 니 다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기