수백만 개의 데이터를 보유한 mysql 테스트 환경 소개

藏色散人
풀어 주다: 2019-04-17 17:19:45
앞으로
3788명이 탐색했습니다.

mysql은 매우 우수한 무료 데이터베이스로 널리 사용됩니다. 일반적으로 우리가 개발하는 프로젝트의 데이터는 100만 개를 초과하는 경우가 거의 없습니다. 최근에는 수백만 건의 데이터에 대한 mysql 최적화에 대한 심층적인 연구에 많은 시간을 쏟았습니다. 저는 많은 문제에 직면했고 이를 해결했으며, 이를 여러분과 공유하고 싶습니다. 여러분의 소중한 의견을 환영합니다!

관련 권장 사항: "MySQL 튜토리얼"

테스트 환경

총 데이터 수는 300만 개, 약 1G의 디스크 공간을 차지합니다

데이터 구조

表1 news [ 文章表 引擎 myisam 字符集 utf-8 ]
-----------------------------------------------------
idint11主键自动增加
cateint11索引
titlevarchar200标题(便于基础搜索做了索引)
contenttext文章正文
dateint11文章发布时间(时间戳形式)
로그인 후 복사
表2 cate [ 文章分类表 引擎 myisam 字符集 utf-8 ]
-----------------------------------------------------
cate_idint11主键自动增加
cate_namevarchar200文章标题
로그인 후 복사

총 쿼리 수

myIsam 引擎下
select count(*) as total from news
//耗时 0.001秒 极快 
//带上条件
select count(*) as total from news where cate = 1
耗时 0.046秒 可以接受的速度
innodb 引擎下
select count(*) as total from news
//耗时 0.7秒 很慢
select count(*) as total from news where cate = 1
耗时 0.7秒 很慢
로그인 후 복사

왜 2종인가요? 엔진 쿼리 속도에 이렇게 큰 차이가 있나요?

InnoDB는 테이블의 특정 행 수를 저장하지 않습니다. 즉, 테이블에서 select count(*)를 실행할 때 InnoDB는 행 수를 계산하기 위해 전체 테이블을 스캔해야 합니다.

MyISAM은 단순히 저장된 행 수를 읽습니다.

count(*) 문에 where 조건이 포함되어 있으면 두 테이블의 작업이 다소 다릅니다. InnoDB 유형 테이블은 count(*) 또는 count(기본 키)와 where col 조건을 사용합니다. col 컬럼은 테이블의 기본 키가 아닌 고유 제약 조건 인덱스를 갖는 컬럼이다. 이렇게 하면 쿼리 속도가 매우 빨라집니다. 이는 전체 테이블 스캔을 방지하는 것입니다.

Summary

mysql은 count(*)를 이용해 총 300만개의 데이터를 쿼리하고(myisam 엔진) 조건이 포함되어 있고(인덱스가 올바르게 설정되어 있음) 실행시간은 정상이다. 자주 읽는 데이터의 경우 myIsam 엔진을 사용하는 것이 좋습니다.

위 내용은 수백만 개의 데이터를 보유한 mysql 테스트 환경 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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