2012-03-01 5 views
0

우선 영어로 유감입니다.비정규 화는 성능에 좋음

저는 약 백만 건의 레코드가 포함 된 데이터베이스 작업 중입니다. 10 개의 테이블이 있고 모두 외래 키를 사용하여 연결되어 있습니다. 레코드를 저장하는 엔티티가 사람이라고 가정 해 봅시다. 그래서 1 테이블에서 나는 다른 테이블에있는 사람의 정보를 가지고 있습니다. 저는 그의 직업 정보 등을 가지고 있습니다. 저는 데이터베이스가 지금 당장 정상화되고 있다고 말하려고했습니다. 데이터를 가져 오려면 여러 조인이 포함 된 쿼리를 실행하고 있으며 정상적인 시간에 데이터를 가져옵니다. 그러나 일부 포럼/기술 블로그에서 데이터를 선택하기 만하면 비정규 화 된 데이터베이스로 인해 성능이 크게 높아질 수 있습니다. 나는 내 자신의 데이터베이스로 그것을 시도하고 난 "denormal_data"열을 만들었습니다. 그것으로 작업하는 동안 나는 테이블이 조금 더 커지고 지금은 50 개 이상의 컬럼을 포함하고 있다는 것을 알게됩니다. 좋은가요? 나는 비정규 화 된 데이터베이스 테이블을 정말로 필요로 하는가? 좋은 습관입니까?

그럼 대부분의 경우 일반적인 문제이며 모든 종류의 문제이며 학습 목적으로 만 사용됩니다. 어떤 종류의 전문가 조언든지 높게 평가 될 것이다.

감사

+1

가 도움이 될 수 있습니다보고 싶을 수도 있지만, 특정 시나리오에 매우 의존적이다. 테이블과 조인에 대해 더 자세히 설명해 주시겠습니까? –

답변

4

나는 복용 특정 알약이 여자 내 가능성을 높일 수 있다는 인터넷에서 읽을 수 있지만 본인은 모든 것을 믿지 않는다. 너도 마찬가지야.

정상화는 좋은 일입니다. 더 나은 성능을 위해 다른 모든 방법을 다 써 버릴 때까지 버려 두지 마십시오.

모든 테이블에는 기본 키가 있어야합니다.

모든 외래 키에는 색인이 있어야합니다. WHERE 절의 모든 열을 사용해야합니다.

단일 사용자 데스크톱 응용 프로그램 용으로 만들어진 Access와 같은 것을 사용하지 않는 한, 백만 레코드는 요즘 큰 데이터베이스가 아닙니다.

실적을 확인하려면 모든 검색어에 대해 EXPLAIN PLAN을 사용해야합니다.

의미있는 데이터를 먼저 얻지 않고서는 아무 것도 바꿀 수 없습니다. 좋은 기준이 없다면, 실제로 문제가 있는지 또는 치료가 효과적인지 알 수 없습니다.

+0

+1 나는 똑같은 말을하려고했다. 또한 좋은 데이터베이스 디자인은 데이터가 관련되어있을 때 데이터를 유지하고 그렇지 않을 때는 데이터를 분리한다고 생각합니다. "고객"이라는 비즈니스 개념이 있지만 데이터베이스의 기본 "고객"레코드를 얻기 위해 여러 테이블에서 플랫 조인을 수행해야하는 경우 데이터 결합을 고려해야합니다. – Fenton

+0

+1 누가 "** 조숙 한 ** 최적화가 모든 악의 뿌리"라고 말했습니까? –

+0

Donald Knuth, 물론 : http://en.wikipedia.org/wiki/Tony_Hoare – duffymo

0

사실 계산할 데이터가 많은 경우 비정규 화하는 것이 유용합니다. 예를 들어 포럼에서 "message_number"또는 "topic_length"라는 열을 사용하여 성능에서 실제로 욕심을 일으킬 수있는 "카운트"기능을 피할 수 있습니다.

비정규 화를 통해 데이터베이스의 성능을 향상시키는 방법은 많이 있지만 생각 해봐야합니다.

0

비정규 화는 필요할 때 사용할 수있는 전략입니다. 데이터베이스 성능이 응용 프로그램에 부정적인 영향을 미칠 때가 있습니다. 당신은 이미 모든 쉬운 트릭 (색인 등)을 시도했습니다. 비정규 화는 자유롭지 않습니다. 달리해야 할 일을 수동으로 수행해야합니다 (예 : 사용자의 이메일 주소를 업데이트하려는 경우 5 개의 테이블 모두에서 수행하십시오).

tl; dr : 필요할 때만 사용하십시오. 당신은 아마 그것을 필요로하지 않습니다.

0

비정규 화를 사용하려는 경우 비정규 화 된 형식으로 빠르게 액세스하려는 데이터가 포함 된 두 번째 테이블 집합을 규칙적으로 동기화하여 생성하십시오. 오래된 데이터가 될 것입니다 (그러나 새로 고침 직후에 진행되지는 않습니까?), 몇 살인지 표시해야합니다.

당신은 또한 용어 때때로 CQRS

관련 문제