집 >데이터 베이스 >MySQL 튜토리얼 >Mysql-clustered index 느린 정렬 사례 분석
선택을 많이 할 때 mysiam 엔진을 사용해야 하는 이유는 무엇인가요? 특히 인덱스가 있는 경우
이 글은 실제 적용에 의존하여 분석합니다.
1. 서문:
온라인에서 흥미로운 현상을 봤습니다. 1W의 데이터 볼륨을 갖는 테이블이 다른 orderby 조건과 쿼리 시간을 실행합니다. 실제 적용에서 실제 문제는 무엇입니까? ? 왜?
2. 분석
a) 상황설명 :
1. ); orderby 쿼리에 전자를 사용하면 속도가 느리지만, orderby 쿼리에 후자를 사용하면 매우 빠릅니다.
2. 각 행의 데이터 양이 상당히 많습니다.
3. 가 기본 인덱스이고, 선택 쿼리를 위한 필드도 ID만 있으면 인덱스가 이를 덮고 있으므로 데이터를 검색하기 위해 물리적 디스크로 이동할 필요가 없습니다. 하지만 더 빨라야 하는 쿼리가 더 느립니다. Mysql-index 적용 범위
b) 분석:
은 mysiam 엔진을 사용해서는 안 됩니다. 그렇다면 이 두 인덱스를 사용하는 쿼리 속도는 거의 같습니다. , 인덱스에 저장되는 것은 물리적인 행의 주소이고, 실제 차지하는 데이터의 양은 크지 않기 때문이다. 그러나 innodb라면 다릅니다. 행의 모든 데이터는 기본 인덱스 아래에 저장됩니다.
c). 결론:
1. 주된 이유:
을 사용하는 innodb 엔진은 클러스터형 인덱스이며, 기본 키 ID 인덱스도 해당 행에 연결되어 있습니다. 다른 데이터, 따라서 ID를 따라 정렬할 때 각 ID를 쿼리하고 순회하려면 많은 작은 블록을 교차해야 합니다. (mysiam에는 데이터가 많지 않으므로 동일한 데이터 블록을 교차하고 더 많은 행을 순회하는 것이 더 빠릅니다.) 🎜>
2. 이유: 여러 분야의 데이터 양이 상대적으로 많습니다. 즉, 가족을 데리고 오는 사람들이 많고, 데이터의 양이 상대적으로 많습니다. 각 행의 데이터 양이 많고 디스크에 저장할 때 많은 블록을 차지합니다3. 당시 mysiam 엔진에는 이 문제가 없었습니다d). 결론: select가 많이 실행되는 경우에는 mysiam 엔진을 사용해야 합니다. insert 및 업데이트가 많이 실행되는 경우에는 innodb 엔진을 사용해야 합니다. 더 많은 결론은 다음을 참조하세요: Mysql-Index Summary3. 시뮬레이션 테스트위에서 언급한 조건을 복원하고 두 개의 테이블을 생성하고 다른 엔진을 제외하고는 그 외 조건은 동일, 기본키 ID 기본 인덱스, 조인트 인덱스(id, ver). 1. 새로운 테이블 t7 생성, mysiam 엔진