>  기사  >  데이터 베이스  >  mysql 빅데이터에서 Limit 사용

mysql 빅데이터에서 Limit 사용

伊谢尔伦
伊谢尔伦원래의
2016-11-24 11:01:001317검색

항상 Oracle을 사용해 온 사람으로서 오늘은 MySQL에서 동일한 기능이 서로 다른 크기의 성능을 보여 매우 놀랐습니다.

먼저 ibmng(id,title,info) 고유 ID 키 인덱스 제목 테이블을 살펴보세요

먼저 두 문을 살펴보세요.

select * from ibmnglimit 1000000, 10

 select * from ibmnglimit 10,10

많은 분들이 별 차이 없을 거라고 생각하시겠지만, 착각입니다. 차이가 너무 크네요.(일부 있을 수도 있습니다) 기계에 따라 다르지만 확실히 10배 이상입니다.) 구체적인 실행 시간은 궁금한 학생들에게 맡깁니다.

이게 왜 다 오프셋 잘못이에요!

최적화하려는 경우 다음과 같이 오프셋을 줄이는 방법을 찾을 수 있습니다.

Select * From ibmng Where id >=(
Select id From ibmng Order By id limit 1000000,1
)limit 10

확실히 문제가 보일 것입니다. 동일한 오프셋과 동일한 크기가 아닌가요? (하지만 또 틀렸어요, 결과는 실행 후에야 알 수 있죠!)

이유는 id가 인덱스라서 빠르기 때문에 다음 sql은 어떨까요:

select id from ibmng where title='mysql' order by idlimit 1000000,10;

모두가 이 SQL에 대해 또다시 틀릴 것이라고 추측할 것이며 또한 달팽이처럼 느립니다. (여기 있는 모든 사람은 제목이 색인화되어 있다고 생각할 것입니다. 왜 이런 일이 발생합니까!)

다음으로 모두는 다음과 같이 또 다른 SQL을 실행합니다.

select id from ibmng where title='mysql'limit 1000000 , 10;

실행해 보면 속도가 sousou만큼 빠르다는 것을 알 수 있습니다!

이는 모두 인덱스 사용 때문입니다. 제목='mysql'에서 ID 제한이 1000000,10인 경우 복합 인덱스를 추가하세요. (제목, 아이디)!

참고: 다음 내용은 제한과 관련이 없습니다!

마지막으로 현재 시나리오로 돌아가서 수천만 개의 데이터를 일괄적으로 읽는 경우 제한을 사용하지 않고 기본 키 범위를 사용하여 판단하는 것이 가장 좋습니다! (예: id<=1001000 및 id>=1000001)


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.