2010-05-14 1 views
5

향후 MyISAM 테이블을 가져올 미래의 데이터베이스로 데이터를 가져오고있다. MyISAM을 선택한 이유는 내 요구 사항이 더 빠르다는 것을 이해하기 때문입니다 (MySQL/SQL을 전혀 경험하지 못했습니다).데이터베이스를 정규화 했습니까? MyISAM 테이블 읽기, 성능 우선 순위가 중요하다. (MySQL)

해당 테이블에는 ID, 이름, 성별, 전화 번호, 상태 및 국가, 도시, 거리 열과 같은 다양한 열이 있습니다. 이제 문제는 마지막 3 열의 표 (예 : Country : Country_ID, Country_Name)를 만들고 주 테이블에서 ID (정규화 ... [?])로 참조해야하며 그렇지 않으면 VARCHAR로 저장해야합니다. 주 테이블 (중복, 분명히)?

내 기본 관심사는 속도입니다. 테이블에 데이터가 기록되지 않으므로 데이터 무결성이 우선 순위가 아닙니다. 유일한 조치는 특정 행을 선택하거나 특정 기준을 훨씬 초과하는 행을 검색하는 것입니다.

단순히 VARCHAR를 사용하면 국가, 도시 및/또는 거리 열 (및 동일한 검색의 다른 열)으로 검색하는 것이 더 빠릅니까?

편집 : 테이블에는 약 30 열과 약 10m 행이 있습니다.

+0

다른 저장 장치를 고려해 보셨습니까? MySQL은 사용하지 않는 기능 때문에 지불 할 필요가없는 오버 헤드가 발생할 수 있습니다. 당신은 여기에 몇 가지 대안을 찾을 수 있습니다 http://en.wikipedia.org/wiki/Nosql http://en.wikipedia.org/wiki/Embedded_database –

답변

4

데이터베이스가 문자열 대신 정수 만 비교하면되므로 정상화하면 검색 속도가 더 빠릅니다. 테이블 데이터도 더 작아서 더 많은 데이터를 한 번에 메모리에로드 할 수 있으므로 검색 속도가 빨라집니다.

테이블의 색인이 올바르게 작성되면 매우 빠른 속도로 진행됩니다. 큰 차이는 없을 것입니다.

LIKE '%foo%'을 쓰는 사람은 full text search을보고 싶을 수도 있습니다. LIKE '%foo%'은 색인을 사용할 수 없으므로 전체 테이블 검색이 가능합니다.

+0

하나는 반드시 색인 테이블을 올바르게 MAKE @hello !!!! –

+0

테이블이 정규화되어 있으면 검색 속도가 빨라질 것이라고 동의하지 않지만 전반적으로 좋은 조언입니다. –

+0

동의를 얻으려면 색인 생성이 성능에 우선 순위가 있어야합니다. 그러나 정규화는 정수와 문자열을 비교하는 것과 아무런 관련이 없습니다. 서로 게이트 키를 소개하는 것이 정상화되지 않습니다. – reaanb

1

평소 "It Depends"답보다 더 많은 것을 알려 드리겠습니다.

# 1 - 모든 것이 작은 N에 대해 빠릅니다. 100,000 개 미만의 행이있는 경우 평면으로로드하고 색인을 생성하여 더 높은 우선 순위로 이동하십시오.

모든 것을 (모든 열) 모든 것을 읽는 것이 더 빠르지 만 검색하거나 검색하려면 대개 색인이 필요합니다. 데이터가 매우 커서 도시 및 국가 정보가 중복되면 더 좋을 수 있습니다. 서로 다른 외래 키를 별개의 테이블에 가지고 있지만, 실제로 어렵고 빠르다고 말할 수는 없습니다.

일반적인 모델링 (예 : 엔티티 - 관계) 또는 차원 (예 : Kimball)이 일반적으로 사용되는 일종의 데이터 모델링 원리가 거의 항상 사용되는 이유입니다. 두 경우의 규칙 또는 방법론은 모델링 모든 유스 케이스를 예상 할 필요없이 데이터. 분명히 모든 사용 패턴을 아는 것은 데이터 모델을 지원하기 위해 데이터 모델을 편향시킬 것입니다. 따라서 많은 집계 및 분석이 비정규 화 된 차원 모델을 사용하는 강력한 지표입니다.

데이터 프로필 (행 너비와 행 수)과 사용 패턴에 따라 크게 달라집니다.

+0

테이블의 "크기"를 언급하는 것을 잊었습니다. 약 30 열 너비 (열 유형은 주로 VARCHAR)와 약 10m 행입니다. 그래서 저는 정상화가 더 현명하다고 생각합니다. – hello

+0

@hello 일반적으로 정규화는 좋지만 치수 접근법은 몇 가지 실질적인 이점을 가질 수 있습니다. 특히 코드/유형/인구 통계의 조합을 매우 빠르게 검색 할 수있는 "정크 치수"기술을 생각합니다. –

0

불행히도 평소 "It Depends"답보다 많은 것을 가지고 있지 않습니다.

실제로 수행하는 검색에 필요한만큼 정규화를 수행하십시오. 새크라멘토의 엘름 스트리트 (Elm Street) 또는 덴버의 메이플 애비뉴 (Maple Avenue)에 살고있는 사람들을 실제로 검색하지 않는다면, 그 칼럼을 정상화하려는 노력은 거의 낭비입니다.일반적으로 업데이트 오류를 ​​피하기 위해 정상화 할 것이지만 데이터 무결성은 위험이 없다고 말한 것입니다.

매끄러운 쿼리 로그를 매를보세요. 그러면 정상화해야 할 것이 무엇인지 알려줄 것입니다. 이러한 쿼리에 EXPLAIN을 수행하고 인덱스를 추가하여이를 향상시킬 수 있는지 또는 정규화해야하는지 여부를 결정하십시오.

필자는 "하이퍼 정규화"라고 부르는 일부 데이터 모델을 사용해 왔습니다. 그것들은 모든 적절한 형식으로 존재하지만, 우리가 데이터를 사용하는 방법에 대해 필요하지 않은 것들을 위해 자주 사용되었습니다. 이러한 종류의 데이터 모델은 눈에 띄지 않게 이해하기가 쉽지 않으며 매우 귀찮습니다.