데이터베이스 정규화 후에도 여전히 인덱싱이 필요하십니까


14

정규화가 완료된 후에도 테이블을 인덱스해야합니까? 이것이 성능에 어떤 영향을 미치나요? 좋은 정규화 후에 어떤 식 으로든 성능에 영향을 미칩니 까?

기본 키와 외래 키가 이미있는 경우 일반적으로 어떤 열이 색인화됩니까?

데이터베이스를 정규화하는 것이 이미 효과적인 것처럼 보입니다. 그러나 인덱싱이 데이터베이스에 미치는 영향을 건너 뛸 수 있습니다. 쿼리를 사용할 때만 유효합니까? 이것이 어떻게 작동하고 데이터베이스를 개선합니까?


5
기본 키와 외래 키가 이미있는 경우 일반적으로 어떤 열이 색인화됩니까? 날짜. 이름. 검색하거나 정렬해야 할 사항
Carson63000

기본 키의 색인은 계산되지 않습니까?
코드 InChaos

답변:


34

예. 실제로 인덱스에 더 많은주의를 기울여야 할 수도 있습니다. 정규화는 최적의 스토리지 에 관한 것 입니다. 복잡한 조인을 가진 더 복잡한 쿼리가 사용되기 때문에 검색 속도 와 충돌하는 경우가 많습니다 . 빠른 검색 속도가 필요한 데이터베이스를 유지 관리하는 사람들은 정규화를 해제하거나 데이터를 약간 덜 표준화 된 구조로 정렬하여 검색을보다 쉽게 ​​수행 할 수 있습니다.


21
표준화의 목표는 스토리지 효율성이 아니라 삽입, 업데이트 및 삭제 종속성을 제거하는 것입니다. 추가 자료

4
@MichealT에 효율성에 관한 것이 아니라고 동의합니다. 논리적 일관성은 내가 링크에서 얻은 것입니다.
JeffO

논란의 여지가있는 '효율'을 제거하고 (기본적으로 일반화의 일반적인 목적을 요약한다고 생각하지만) '최적'이라는 단어를 대신 사용하여 독자에게 의미가있는 것을 남겨 두겠습니다. 정규화의 실제 목적은 실제로 데이터베이스가 정규화 된 후에 인덱스가 여전히 필요한 이유와 관련이 없습니다.
GrandmasterB

56

데이터베이스 성능을 위해 인덱싱이하는 일을 잘못 이해했다고 생각합니다.

인덱스는 데이터베이스 행을 찾는 데 도움이됩니다 . 인덱스는 디스크 공간을 추가하고 삽입 및 업데이트 할 때의 성능을 대신하여 데이터베이스 엔진이 일치하는 행을 찾는 데 도움이되는 특수한 데이터 구조입니다.

데이터베이스 공간을 최신 상태로 유지하려면 추가 공간과 비용 (일부) 성능이 필요하기 때문에 데이터베이스 디자이너는 응용 프로그램 및 쿼리 패턴에 맞게 인덱스를 명시 적으로 만들어야합니다.

인덱스는 데이터베이스 정규화와 직교합니다.


4

예, 정규화 후에도 여전히 인덱싱이 필요합니다.

작업중인 테이블은 정규화 이전의 테이블만큼 많은 이점을 제공합니다. 실제로, 그 자체로는 테이블과 동일합니다.

한 가지 고려해야 할 사항은 인덱스를 사용하면 데이터를 더 빨리 찾을 수 있습니다. 데이터베이스 디자인을 정규화하는 것은 항상 좋지만 때로는 성능상의 이유로 구현을 비정규 화해야합니다. 그러나 이는 사례별로 만 적용됩니다.


2

예.

인덱스는 데이터 검색 속도를 높이는 방법입니다. 일부 쿼리는 기본 키에 의한 것이며 일반적으로 데이터베이스 엔진에 의해 암시 적으로 인덱싱되지만 다른 쿼리는 다른 열을 사용할 가능성이 있습니다. 일부 쿼리는 고유하지 않은 열로 검색하기 때문에 정규화 후에 기본 키가 될 수 없습니다. 아마도 그러한 열을 색인화해야 할 것입니다.

만들 인덱스를 아는 방법은 하나뿐입니다. 응용 프로그램의 모든 쿼리를 가지고 그들을 위해 대표적인 예 매개 변수를 찾아 데이터베이스 엔진이 자신의 쿼리 계획을 보여이 (모든 데이터베이스 엔진이 EXPLAIN, EXPLAIN QUERY PLAN또는 이와 유사한 명령, 그것은 다른 엔진에서 다르게이라고 함) 및 테스트는 얼마나 오래 그들이 걸릴. 느린 인덱스를 빠르게 만드는 인덱스를 만드는 것보다. 그리고 시도한 색인을 다시 삭제하는 것을 잊지 마십시오. 그러나 자원 낭비를 피하는 데 도움이되지 않았습니다.


1

인덱스는 일반적으로 가장 작은 테이블을 제외한 모든 테이블에 필요합니다. 거의 모든 외래 키를 인덱싱해야하며 FK를 설정한다고해서 인덱스가 있다는 의미는 아닙니다 (적어도 일부 데이터베이스에는 없지만 db 설명서를 확인하십시오). where 절에서 자주 결합하거나 사용하는 필드는 이점이있는 필드 (예 : 데이터에 특정 양의 가변성이 필요하므로 부울이 유리하지 않은 경우)와 인덱스 할 수있는 필드 인 경우 인덱스되어야합니다.

그러나 모든 인덱스는 선택 속도를 높이면서 삽입 \ 업데이트 \ 삭제 속도를 늦추므로 인덱스를 신중하게 선택하십시오.

인덱스는 데이터베이스에서 수용 가능한 성능에 중요합니다.


0

세 번째 일반 형식의 경우 모든 기본 키에 대한 인덱스가 반드시 필요합니다.

다른 인덱스가 필요한지 여부는 데이터베이스 사용 방법에 따라 다릅니다. 예를 들어 특정 우편 번호에서 고객을 정기적으로 검색하는 경우 고객 테이블에서 zip_code 열을 색인화하는 것이 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.