>  기사  >  데이터 베이스  >  MySQL 키 잠금을 사용하는 방법

MySQL 키 잠금을 사용하는 방법

WBOY
WBOY앞으로
2023-05-26 22:37:041209검색

1. 기본적으로 innodb는 임시 키 잠금을 사용하여 레코드를 잠급니다.

select ... for update

2. 쿼리 인덱스에 고유 속성이 포함된 경우 임시 키 잠금이 최적화되어 레코드 잠금으로 다운그레이드됩니다. 즉, 범위가 아닌 인덱스 자체만 잠깁니다.

3. 다양한 상황에서 키 잠금 성능이 저하됩니다.

인스턴스

事务1
 
start transaction;
select SLEEP(4);
select * from test where age=22 for update;
select * from test where age>23 for update;
select sleep(20);
commit;
 
**************************
事务2
 
start transaction;
select sleep(8);
select * from test where age=20 for update;
select * from test where age=21 for update;
select * from test where age=22 for update;
select * from test where age=23 for update;
commit;
 
 
************************************
事务执行状态
 
事务1
 
start transaction
> OK
> 时间: 0s
 
 
select SLEEP(4)
> OK
> 时间: 4.001s
 
 
select * from test where age=22 for update
> Affected rows: 0
> 时间: 0.001s
 
 
select * from test where age>23 for update
> Affected rows: 0
> 时间: 0.001s
 
 
select sleep(20)
> OK
> 时间: 20s
 
 
commit
> OK
> 时间: 0.001s
 
 
***********************
事务2
 
start transaction
> OK
> 时间: 0.001s
 
 
select sleep(8)
> OK
> 时间: 8s
 
 
select * from test where age=20 for update
> Affected rows: 0
> 时间: 0.001s
 
 
select * from test where age=21 for update
> Affected rows: 0
> 时间: 0.001s
 
 
select * from test where age=22 for update
> Affected rows: 0
> 时间: 14.158s
 
 
select * from test where age=23 for update
> Affected rows: 0
> 时间: 0.001s
 
 
commit
> OK
> 时间: 0s

위 내용은 MySQL 키 잠금을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제