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 중국어 웹사이트의 기타 관련 기사를 참조하세요!