MySql 지식 점 의 사무,색인,잠 금 원리 와 용법 분석
사무.
사무 개념
사 무 는 원자 적 인 SQL 조회 나 독립 된 작업 단원 이다.데이터베이스 엔진 이 한 조 의 조작 문 구 를 실행 하면 모든 조작 을 오래 실행 합 니 다.그 중 에 어떤 충돌 이나 다른 원인 이 실행 되 지 않 으 면 모든 문 구 는 실행 되 지 않 습 니 다.즉,사무 내 문 구 는 모두 실행 에 성공 하거나 모두 실행 에 실패 한 것 이다.
트 랜 잭 션 특성 ACID
원자 성(atomicity)하나의 사 무 는 최소 작업 단위 로 간주 되 며,분리 할 수 없습니다.전체 업무 의 모든 작업 이 성공 적 으로 제출 되 거나,모두 실패 하고 스크롤 백 되 며,부분 만 실행 할 수 없습니다.
일치 성(consistency)데이터 베 이 스 는 일치 하 는 상태 에서 다른 일치 하 는 상태 로 바 뀌 었 다.데이터 베 이 스 는 어떤 상태 에서 모든 완전 성 제약 에 부합 되 는 상태 입 니 다.
격 리 성(isolation)일반적으로 한 사무소 가 수정 한 것 은 최종 제출 전에 다른 사무 에 서 는 볼 수 없다.이 때 는 각 업무 가 격 리 되 어야 하 며,업무 간 에 서로 간섭 해 서 는 안 된다 는 것 을 보증 해 야 한다.
지속 성(durability)트 랜 잭 션 이 제출 되면 모든 변경 사항 은 데이터베이스 에 영구적 으로 저 장 됩 니 다.시스템 이 무 너 져 도 수 정 된 데 이 터 는 잃 어 버 리 지 않 습 니 다.
4.567917.업무 의 격 리 단계
읽 기 UNCOMMITTED(읽 기 미 제출)트 랜 잭 션 의 수정 은 제출 되 지 않 았 더 라 도 다른 트 랜 잭 션 에 대해 서도 볼 수 있 습 니 다.트 랜 잭 션 은 제출 되 지 않 은 데 이 터 를 읽 고 더러 운 독 서 를 할 수 있 으 며 중복 되 지 않 을 수 있 습 니 다.
읽 기 COMMITTED(제출 읽 기)대부분의 데이터베이스 의 기본 단 계 는 READ COMMITTED(MySQL 기본 REPEATABLE READ)입 니 다.이 단 계 는 더러 운 읽 기 를 해 결 했 지만 중복 읽 을 수 없습니다.같은 조 회 를 두 번 실행 하기 때문에 조회 결과 가 다 릅 니 다.
SERIALIZABLE(직렬 화 가능)직렬 화 는 격 리 최고급 으로 트 랜 잭 션 직렬 실행 을 강제 하여 환 독 을 완전히 피 할 수 있 습 니 다.쉽게 말 하면 SERIALIZABLE 은 읽 는 줄 마다 자 물 쇠 를 추가 하기 때문에 대량의 대기 시간 초과 와 자물쇠 경쟁 문 제 를 초래 할 수 있 고 실제 개발 에 서 는 거의 사용 되 지 않 습 니 다.
인덱스
색인 개념
색인 은 저장 엔진 사용자 가 기록 을 신속하게 찾 는 데이터 구조 로 예 를 들 어
SELECT userName FROM user WHERE userId = 1;
userId 열 에 색인 을 추가 하면 MySQL 은 이 색인 을 사용 하여 userId 의 줄 을 찾 습 니 다.즉,MySQL 은 색인 에서 값 에 따라 찾 은 다음 이 값 을 포함 하 는 모든 데이터 줄 을 되 돌려 줍 니 다.색인 방식
B-Tree 인덱스B-Tree 데이터 구 조 를 사용 하여 데 이 터 를 저장 합 니 다.대부분의 MySQL 엔진 은 이 색인 을 지원 합 니 다.B-Tree 색인 은 데이터 에 접근 하 는 속 도 를 가속 화 할 수 있 습 니 다.B-Tree 는 색인 열 순서 에 대해 저장 하고 범위 찾기 가 빠 르 기 때 문 입 니 다.
hash 인덱스
해시 색인 기본 해시 표 는 색인 모든 열 에 정확하게 일치 하 는 조회 만 유효 합 니 다.모든 줄 의 데이터 에 대해 저장 엔진 은 모든 색인 열 에 해시 코드 를 계산 하고 해시 코드 의 값 은 비교적 작다.해시 색인 은 모든 해시 코드 를 색인 에 저장 하고 하 스 표 에 모든 데이터 줄 을 가리 키 는 지침 을 저장 합 니 다.MySQL 에는 해시 색인 을 지원 하 는 메모리 엔진 만 표 시 됩 니 다.
색인 종류
일반 색인
주요 작업 은 데이터 에 대한 접근 을 가속 화 합 니 다.
유일한 색인
일반 색인 은 데이터 중복 을 허용 합 니 다.특정한 열 데이터 가 중복 되 지 않 는 다 면 유일한 색인 을 만 들 수 있 습 니 다.유일한 색인 은 두 가지 장점 이 있 습 니 다.색인 은 더욱 효과 적 입 니 다.새 데 이 터 를 삽입 하고 중복 되면 MySQL 은 삽입 을 거부 합 니 다.
메 인 키 인덱스
홈 키 자체 기본 생 성 색인
전체 텍스트 인덱스
텍스트 필드 의 일반 색인 은 필드 내 맨 앞 에 나타 난 문자열 에 대한 검색 작업 을 가속 화 할 수 있 습 니 다.필드 에 몇 개 또는 여러 단어 로 구 성 된 큰 단락 의 문자 가 저장 되 어 있 으 면 일반 색인 은 안 됩 니 다.이 경우 전체 텍스트 색인 을 사용 하 는 것 이 좋 습 니 다.
조회 효율:유일한 색인>홈 키 증가>홈 키
삽입:홈 키>홈 키 추가>유일한 색인
자물쇠.
여기 서 우 리 는 주로 하행 급 자 물 쇠 를 토론 한다.
표 급
엔진 마 이 ISAM 은 시계 전 체 를 잠 그 는 것 으로 이해 할 수 있 으 며 동시에 읽 을 수 있 고 동시에 쓸 수 없다.잠 금 기간 동안 다른 프로 세 스 는 이 표를 쓸 수 없습니다.잠 금 을 쓰 는 경우 다른 프로 세 스 는 읽 을 수 없습니다.
행 급
엔진 INNODB 는 한 줄 의 기록 에 자 물 쇠 를 추가 하여 동시에 읽 을 수 있 으 며 동시에 쓸 수 없습니다.행 급 잠 금 비용 이 많 고 잠 금 이 느 립 니 다.자물쇠 가 생 긴 다;잠 금 입도 가 가장 작고 잠 금 충돌 이 발생 할 확률 이 가장 낮 으 며 병발 도 가장 높다.
InnoDB 자물쇠 줄InnoDB 는 Row-Level Lock 이 미리 설정 되 어 있 기 때문에[명확]지 정 된 메 인 키 만 MySQL 에서 Row lock 을 실행 합 니 다.그렇지 않 으 면 MySQL 에서 Table Lock 을 실행 합 니 다.
예 1:(홈 키 를 명 확 히 지정 하고 이 기록 이 있 습 니 다.Row Lock)
SELECT * FROM products WHERE id='3' FOR UPDATE;
SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE;
예 2:(홈 키 를 명 확 히 지정 합 니 다.이 기록 이 없 으 면 lock 이 없습니다)
SELECT * FROM products WHERE id='-1' FOR UPDATE;
예 3:(홈 키 없 음,table lock)
SELECT * FROM products WHERE name='Mouse' FOR UPDATE;
예 4:(메 인 키 가 명확 하지 않 음,table lock)
SELECT * FROM products WHERE id<>'3' FOR UPDATE;
예 5:(메 인 키 가 명확 하지 않 음,table lock)
SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;
주 1:FOR UPDATE 는 InnoDB 에 만 적용 되 며 거래 블록(BEGIN/COMMIT)에서 만 유효 합 니 다.주 2:잠 긴 상 태 를 테스트 하려 면 MySQL 의 Command Mode 를 이용 하여 두 개의 창 을 열 어 테스트 할 수 있 습 니 다.
더 많은 MySQL 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,,,
본 논문 에서 말 한 것 이 여러분 의 MySQL 데이터베이스 계획 에 도움 이 되 기 를 바 랍 니 다.