문제

나는 최적화하려고 노력하고있다 레드 민 너무 많은 고통을 받기 전에 데이터베이스; 변경 (기본적으로 모든 SVN 변경의 로그)은 137000 행 (ISH)이며 테이블은 B ASIC 기본 설정으로 설정됩니다. 키 포장 등이 없습니다.

테이블은 다음과 같습니다

ID int[11] Auto Inc (PK)
changeset_id int[11]
action varchar[1]
path varchar[255]
from_path varchar[255]
from_revision varchar[255]
revision varchar[255]
branch  varchar[255]

지수 : 1 차 (ID),
changeset_id는 btree를 색인으로 설정했습니다

모든 정보를 기반으로 한 LATIN1 숯 http://forge.mysql.com/wiki/top10sqlperformancetips

테이블 엔진은 InnoDB 팩 키입니다. 기본값으로 설정되어 있습니다 (팩 char varchar)

다른 모든 옵션이 꺼집니다.

이것을 최적화하는 가장 좋은 방법은 무엇입니까? (바 잘림; o)))

도움이 되었습니까?

해결책

MySQL을위한 몇 가지 일반적인 최적화 기술이 있습니다. 첫 번째는 데이터 유형이 ABC에 맞는지 확인하는 것입니다. 여기). 그런 다음 위에서 아래로 이동하면 ID와 Changes_ID가 좋아 보이면 액션은 아마도 숯이되어야합니다.1 Varchar 대신 (비워 둘 수있는 경우 Nullable 가능합니다 (일반적으로 Nullable이 다른 필드에서 올바르게 설정되어 있는지 확인)). 다른 5 개의 다른 필드 (크기에 따라 테이블을 지배 할 것임)는 문자열이 올바른 데이터 유형입니까? (나는 Path, From_Path, Branch에서 YES를 추측하지만 개정은 숫자가되어야합니다 (git 또는 무언가를 지원하지 않아서)))))))))))

또한, 특히 "경로"및 "개정"테이블이 4 개를 정규화하기 때문에 정규화 목표처럼 보입니다.다음은 기본 튜토리얼입니다, 필요한 경우)

다른 팁

그것은 전적으로 읽기 및 쓰기 특성, 즉 당신이 만드는 쿼리, 그리고 얼마나 자주 글을 쓰는지에 달려 있습니다.

쓰기를 최적화하는 방법은 인덱스 수를 최소화하는 것입니다. 이상적으로는 MS SQL Server의 내용을 사용하여 단조 적으로 증가하는 키가있는 "클러스터 된 인덱스"가되는 것을 사용하여 테이블 끝에 새 레코드를 작성하고 다른 별도의 인덱스를 작성하지 않도록합니다. 더 나은 것은 트랜잭션 기능이 필요하지 않은 경우 DBMS를 건너 뛰고 어떤 종류의 평범한 오래된 로그 파일에 쓰는 것입니다.

쿼리의 경우, 원하는만큼 복잡해질 수 있습니다. 그러나 쿼리를 위해 테이블에서 상당한 양의 데이터가 필요한 경우 (즉, 키를 기반으로 한 단일 레코드를 찾는 것 이상) 테이블 스캔은 그렇게 나쁘지 않을 수 있습니다. 일반적으로 테이블 내용의 3-5% 이상을 검사하는 경우 테이블 스캔이 매우 빠릅니다. 다시 말하지만, 평범한 오래된 파일은 아마도 DBMS보다 빠를 것입니다.

둘 다 최적화 해야하는 경우, 쓰기를 최적화 한 다음 정기적으로 사본을 작성하여 쿼리를 최적화하고 사본에 대한 쿼리를 수행하는 것을 고려하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top