정규화된 테이블을 사용하는 것이 정말 더 나은가요?
저는 제 팀장이 과거 프로젝트에서 쿼리를 더 빨리 수행하기 위해 정규화를 폐지해야 했다고 말하는 것을 들었습니다.
테이블 노조와 관련이 있을 수도 있다고 생각합니다.
살코기 테이블을 더 많이 갖는 것이 살코기 테이블을 적게 갖는 것보다 정말 덜 효율적입니까?
테이블을 결합하는 속도는 테이블을 '사전 결합'하는 것보다 느립니다. 즉, 정규화되지 않은 큰 테이블을 하나 갖는 것보다 느립니다.그러나 정규화를 해제하면 데이터 중복이 발생하고 테이블이 더 커질 수 있습니다.정규화는 '임의의' 질문에 답할 수 있는 데이터베이스를 만들기 때문에 좋은 것으로 간주됩니다. 올바르게 수행되면 데이터에 액세스할 수 있는 선택 항목을 작성할 수 있습니다.이는 일부 다른 형태의 DB에서는 해당되지 않으며, 이제 (대부분) 역사적 무관성이며, 정규화/관계 DB가 그 전투에서 이겼습니다.
질문으로 돌아가서, 비정규화를 사용하여 작업을 더 빨리 진행하는 것이 잘 받아들여지는 기술입니다.일반적으로 DB를 잠시 실행하는 것이 가장 좋습니다. 그러면 무엇을 정규화 해제하고 무엇을 그대로 두어야 하는지 알 수 있습니다. 또한 데이터를 '올바른' 정규화된 형태로 유지하고 정규화되지 않은 보고 테이블 집합에 정기적으로 데이터를 가져오는 것이 일반적입니다.이 프로세스가 보고서 실행 자체의 일부로 수행되면 데이터도 항상 최신 상태로 유지됩니다.
과도한 정규화의 예로 과거에 DB에서 요일과 달을 별도의 테이블로 추출한 경우(날짜 자체가 정규화된 경우) 너무 지나칠 수 있습니다.
OLTP(Online Transaction Processing) 데이터베이스와 OLAP(Online Analytical Processing) 데이터베이스 간의 차이점을 조사해야 합니다.
즉, 주로 기록 트랜잭션(OLTP)과 관련된 데이터베이스 시스템은 일반적으로 보다 정규화된 방식으로 구성되어 데이터 중복을 줄이고 최적화된 데이터 검색을 희생하면서 레코드의 생성과 업데이트를 용이하게 합니다.
OLAP(데이터 검색 및 분석)에 더 관심이 많은 데이터베이스 시스템은 일반적으로 정규화되지 않은 방식으로 구성되어 쿼리 및 분석 속도를 극대화하기 위해 데이터 스토리지 최적화를 희생합니다.
데이터베이스 정규화 및 정규화 해제가 이러한 절충의 핵심입니다.
제프는 이것에 대해 썼고, 이어서 열띤 토론이 이어졌습니다.또한 SO에 대한 많은 논의의 대상이 되고 있습니다. 예를 들어 데이터베이스 설계가 더 많은 테이블 또는 더 많은 열을 더 잘 설계하는 것은 무엇입니까?다른 사람들이 지적했듯이, 상식을 사용하고 지나치게 정규화하지 마십시오.
Oracle OLTP 데이터베이스에 대한 오랜 경험 중 일부는 매우 크고 사용량이 많은 데이터베이스를 사용하면서 "성능을 위한 정규화"가 진정으로 필요했던 사례를 본 적이 없다고 솔직히 말할 수 있습니다.그러나 저는 누군가가 잠재적인 성능 문제에 대한 두려움, 불확실성 및 의심 때문에 정규화를 적용해야 한다고 미리 결정한 많은 경우를 보았습니다.이 작업은 일반적으로 벤치마크 없이 수행되었으며, 항상 성능 개선이 실제로 이루어지지는 않았지만 데이터 유지보수 코드는 이전보다 훨씬 복잡해졌습니다.
OLAP는 매우 다른 동물이고, 저는 그것에 대해 언급할 입장이 아닙니다.
이 질문은 너무 자주 반복됩니다.주요 이유는 가장 널리 사용되는 데이터베이스 언어인 SQL과 가장 널리 사용되는 모든 구현이 논리적 테이블 설계와 실제 테이블 설계를 결합하기 때문입니다.
논리적 테이블을 항상 정규화해야 한다는 것이 영원한 답이지만, 기존 SQL 구현에서 특정 최적화를 구현하는 유일한 방법은 물리적 테이블 설계를 정규화하는 것이며(그 자체는 나쁜 것이 아닙니다), 이러한 구현에서는논리 테이블 설계를 정규화해야 합니다.
간단히 말해서, 상황에 따라 다릅니다.때로는 비정규화가 성능에 중요하지만, 다른 모든 성능 관련 사항과 마찬가지로 이 경로를 따라가는 것을 고려하기 전에 측정, 측정, 측정해야 합니다.
성능은 RDBMS에서 수행된 정규화의 양과 반대입니다. 즉, 테이블이 정규화될수록 오류가 발생할 가능성이 줄어듭니다.모든 데이터가 하나의 테이블에 저장되는 지점에서 정규화 해제로 인해 RDBMS 성능이 저하될 수 있습니다.
정규화로 인해 성능이 저하되는 것으로 알려진 이유는 조인 비용이 상당히 높기 때문입니다.테이블 X에 N개의 레코드가 있고 테이블 Y에 M개의 레코드가 있는 경우 X와 Y를 결합하면 N*M개의 레코드가 있는 임시 테이블이 생성됩니다.데이터베이스가 필요하지 않은 경우 전체 테이블을 생성하지 않는 데 사용하는 최적화 방법이 있지만, 그럼에도 불구하고 모든 레코드를 처리해야 합니다.
비정규화는 데이터베이스의 순수성을 고려하여 성능을 향상시키기 위해 종종 함께 사용되는 데이터를 단일 테이블에 배치하는 프로세스입니다.대부분은 중간 단계를 건너뛰기 위해 의도적으로 비규격화된 스키마를 설계하는 것조차 허용 가능한 거래라고 생각합니다.
언급URL : https://stackoverflow.com/questions/540136/is-it-really-better-to-use-normalized-tables
'source' 카테고리의 다른 글
시작 위치(str 문자열) (0) | 2023.07.26 |
---|---|
@Input() 값은 항상 정의되지 않습니다. (0) | 2023.07.26 |
참조가 아닌 새로운 변수로 자바스크립트 객체를 복사하는 방법은 무엇입니까? (0) | 2023.07.26 |
mysql 각 데이터 행의 마지막 N자를 다음 행으로 이동합니다. (0) | 2023.07.26 |
최대 절전 모드 - 배치 삽입이 실제로 수행되는지 확인하는 방법 (0) | 2023.07.26 |