수백만 건의 데이터에서 MySQL 조건부 쿼리 및 페이징 쿼리 시 주의사항

藏色散人
풀어 주다: 2019-04-20 09:18:25
앞으로
3642명이 탐색했습니다.

이전 섹션 "수백만 개의 데이터로 인한 Mysql 페이징 문제"에 이어서 쿼리 조건을 추가합니다:

select id from news 
where cate = 1
order by id desc 
limit 500000 ,10 
查询时间 20 秒
로그인 후 복사

정말 무서운 속도입니다! ! 첫 번째 섹션 "수백만 개의 데이터 MySQL 데이터 테스트 환경 소개"의 지식을 사용하여 최적화하세요.

select * from news
where cate = 1 and id > (select id from news where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10 
查询时间 15 秒
로그인 후 복사

최적화 효과는 분명하지 않으며 조건의 영향은 여전히 ​​큽니다! 이 경우 SQL 문을 아무리 최적화해도 운영 효율성 문제를 해결할 수 없습니다. 그러면 아이디어를 바꿔서 기사의 ID와 분류 정보만 기록하는 색인 ​​테이블을 만듭니다. 기사 콘텐츠의 넓은 필드를 별도의 부분으로 나눕니다.

表 news2 [ 文章表 引擎 myisam 字符集 utf-8 ]
-------------------------------------------------
idint11主键自动增加
cateint11索引
로그인 후 복사

데이터를 쓸 때 두 테이블을 동기화하세요. 쿼리의 경우 news2를 사용하여 조건부 쿼리를 수행할 수 있습니다.

select * from news
where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10
로그인 후 복사
로그인 후 복사

조건 id >는 나중에 news2 테이블에서 사용됩니다.

런닝타임 1.23초, 런닝타임이 20배 가까이 단축된 것을 확인할 수 있어요! ! 데이터가 100,000개 정도일 때 쿼리 시간은 약 0.5초 정도로 유지할 수 있는데, 이는 우리가 허용할 수 있는 수준에 점차 가까워지는 값입니다!

하지만 1초는 여전히 서버에 허용되지 않는 값입니다! ! 최적화할 수 있는 다른 것이 있나요? ? 우리는 큰 변화를 시도했습니다:

news2의 스토리지 엔진을 innodb로 변경했는데 실행 결과가 놀라웠습니다!

select * from news
where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10
로그인 후 복사
로그인 후 복사

단 0.2초, 엄청난 속도. 왜 그렇게 큰 차이가 있습니까? mysql 스토리지 엔진에 대한 자세한 설명은 다음 기사를 참조하세요.

위 내용은 수백만 건의 데이터에서 MySQL 조건부 쿼리 및 페이징 쿼리 시 주의사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:hcoder.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿