2012-01-17 4 views
1

동일한 구조의 두 개의 테이블이 있지만 100M 행과 100 개의 행이있는 테이블이있는 경우 삽입이 더 많은 행을 갖는 테이블에서 더 오래 걸릴 것입니까?MySQL이 테이블 크기의 영향을 씁니까?

왜?

+2

이론적으로 테이블이 클수록 색인을 업데이트하는 데 시간이 오래 걸리며 새 행을 기록하기 위해 원시 디스크상의 빈 공간에서 여유 공간을 찾는 데 더 오래 걸립니다. 실제로는 말할 수있는 변수가 너무 많습니다. –

답변

3

특히 열이 indexed 인 경우 100M 행에 삽입하는 데 더 많은 시간이 걸립니다. 인덱싱으로 인해 새로운 삽입 행을 적절하게 인덱싱해야하므로 더 많은 시간이 소요됩니다. 인덱스는 select 문에 대한 좋은 옵션이지만 삽입 수가 많으면 삽입하는 데 시간이 오래 걸리므로 고통이됩니다.

2

예. 테이블에 인덱스가 설정되어 있다면 더욱 그렇습니다. 이 thread은 좋은 읽을 거리입니다.

1

예. 특히 색인 때문입니다. 해당 테이블에 대해 정의 된 인덱스가있는 경우 각 삽입에 대해 일부 계산을 수행해야합니다.

예. 인덱스가 정렬 된 방식으로 행을 정렬한다고 말하면 새 행을 삽입 할 때 인덱스 행에서 해당 행의 위치를 ​​찾아야합니다. 이 작업을 수행하는 바이너리 검색 알고리즘이있을 수 있습니다. 100 개의 행이 있으면 log (100) 시간이 걸리지 만 100M 개의 행이 있으면 log (100M) 시간이 걸립니다.

0

인덱스가 열에 적용되고 새 행이 인덱스에 따라 순차적으로 삽입되지 않으면 인덱스 중간에 값을 삽입하면 성능이 저하되어 인덱스가 재구성됩니다. 그러나 각 인서트에서 페널티가 발생하지는 않습니다. BTREE 색인에는 색인을 재구성하지 않고 중간에 몇 개의 새로운 노드를 삽입 할 수있는 여유 공간이 있습니다.

적절한 메모리가 없으면 색인과 함께 페이징 문제가 발생할 수 있습니다.

관련 문제