이전 섹션 "수백만 개의 데이터로 인한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!