sourcetip

SQL Server에서 기본 키가 필요합니까?

fileupload 2023. 7. 2. 20:54
반응형

SQL Server에서 기본 키가 필요합니까?

이것은 꽤 순진하고 멍청한 질문일 수도 있지만, 어쨌든 나는 그것을 물어볼 것입니다.

저는 몇 개의 필드가 있는 테이블을 가지고 있는데, 어떤 필드도 고유하지 않습니다. 기본 키는 분명히 그렇습니다.

이 테이블은 고유하지 않은 필드를 통해 정기적으로 액세스되지만 사용자 SP 또는 기본 키를 통해 액세스 데이터를 처리하지는 않습니다.그러면 기본 키가 필요합니까?그것은 뒤에서 사용됩니까?제거하면 성능에 긍정적인 영향을 미칩니까, 아니면 부정적인 영향을 미칩니까?

필요합니까?아니요. 뒤에서 쓰였나요?디스크에 저장되고 행 캐시 등에 보관됩니다.제거하면 성능이 약간 향상됩니다(밀리초 정밀도의 시계를 사용하여 주의하십시오).

하지만... 다음에 누군가가 이 표에 대한 참조를 만들어야 할 때, 그들은 당신을 저주할 것입니다.용기가 있는 경우 PK를 추가합니다(그리고 DB가 열을 생성할 때까지 오랜 시간 기다립니다).용기가 없거나 멍청하지 않은 경우 비즈니스 키(즉, 데이터 열)를 사용하여 참조를 생성하기 시작하여 유지 관리에 대한 악몽이 발생합니다.

결론:PK(ATM을 사용하지 않더라도)를 보유하는 데 드는 비용이 너무 적으니 그냥 둬라.

혹시 외국인 키가 있나요, 혹시 PK에 가입한 적이 있나요?

이에 대한 대답이 "아니오"이고 앱이 PK로 테이블에서 항목을 검색하지 않으며 쿼리가 where 절에서 항목을 사용하지 않으므로 IDENTITY 열을 추가하여 PK를 사용하면 다음과 같습니다.

  • PK 자체는 값을 추가하지 않지만 손상도 주지 않습니다.
  • PK가 클러스터된 인덱스일 가능성이 매우 높다는 사실은...상황에 따라 다릅니다.

NC 인덱스가 있는 경우 좁은 인공 클러스터 키(IDENTITY PK)를 사용하면 이러한 인덱스를 좁게 유지하는 데 도움이 됩니다(CDX 키는 모든 NC 리프 슬롯에서 재생성됩니다).따라서 PK는 사용하지 않은 경우에도 중요한 NC 인덱스가 있는 경우 유용합니다.

반면에 널리 사용되는 액세스 패턴이 있는 경우 다른 모든 쿼리보다 중요한 쿼리는 빈도와 중요도이거나 중요한 시간 코드 경로의 일부인 경우(예: 사이트의 모든 페이지 방문에 실행되는 쿼리 또는 매 초 및 앱 등) 해당 쿼리는 클러스터된 키 순서를 지시하기에 적합합니다.

마지막으로 테이블에 대한 쿼리가 거의 없지만 자주 작성되는 경우 힙이 삽입에 훨씬 뛰어나기 때문에 HIP(클러스터 키가 전혀 없음)에 적합할 수 있습니다.클러스터된 인덱스로 구성된 표 비교를 참조하십시오.

기본키뒤있다니습에는입니다.clustered index(비클러스터 인덱스로 생성되지 않는 한 기본적으로) 테이블에 대한 모든 데이터를 보유합니다.PK가 ID 열인 경우 삽입이 순차적으로 수행되고 페이지 분할이 발생하지 않습니다.

그러나 id 열에 전혀 액세스하지 않는 경우 다른 열에 인덱스를 추가할 수 있습니다.또한 PK가 있을 때 FK 관계를 설정할 수 있습니다.

논리적 모델에서 테이블에는 하나 이상의 키가 있어야 합니다.키 중 하나가 '기본'이라고 임의로 지정할 이유는 없으며, 모든 키는 동일합니다.비록 '기본 키'의 개념은 테드 커드의 초기 작업으로 거슬러 올라갈 수 있지만, 그 실수는 관계 이론에서 오랫동안 수정되었습니다.

슬게프,PRIMARY KEY된 행을 수 은 중복될 수 있습니다. SQL 테이블은 중복된 행을 가질 수 있습니다. 그리고 만약 당신이 그 결과 집합을 고려한다면.SELECTSQL 테이블에도 중복된 행이 있을 수 있습니다.관계 이론가들은 SQL을 많이 싫어합니다.하지만 SQL을 통해 모든 종류의 엉뚱한 비관계적 작업을 수행할 수 있다고 해서 실제로 수행해야 하는 것은 아닙니다.모든 SQL 테이블에 하나 이상의 키가 있는지 확인하는 것이 좋습니다.

사용, 사PRIMARY KEY를 들어 그자체의있습다니미가로다있▁on. 예를 들어.NOT NULL,UNIQUE표의 외래 키에 대한 기본 참조입니다.Server에서 Server 사용하기, 사PRIMARY KEY테이블의 클러스터된 인덱스와 같은 의미가 있습니다.그러나 이러한 모든 경우에는 특정 구문을 사용하여 암시적 동작을 명시적으로 만들 수 있습니다.

사용할 수 있습니다.UNIQUE) 및 (인덱스보다 제약) »NOT NULLSQL에서 키를 적용하기 위해 조합됩니다.아니요, 키 따서아요니, 기또키짝수본는라또(키,▁()짝▁therefore수▁no기)PRIMARY KEY를 참조하십시오.

기본 키가 없으면 테이블을 가질 수 없습니다.복제본을 제거해야 하는 경우, 어떤 복제본을 제거하고 어떤 복제본을 보관해야 하는지 어떻게 식별할 수 있습니까?

PK는 필요하지 않습니다.

그러나 쿼리에 사용하는 열(즉, WHERE-절에 나타나는 열)에는 고유하지 않은 인덱스를 배치하는 것이 좋습니다.그러면 조회 성능이 크게 향상됩니다.

기본 키를 정의하면 인덱싱 및 관계에 대한 데이터베이스 내의 성능을 향상시키는 데 도움이 됩니다.

저는 항상 기본 키를 모든 테이블에서 자동 증분 정수로 정의하는 경향이 있습니다. 액세스 여부에 관계없이 기본 키를 자동 증분 정수로 정의합니다. 이는 애플리케이션을 확장하기 시작할 때 실제로 필요한 키를 발견할 수 있기 때문입니다. 그러면 삶이 훨씬 단순해집니다.

기본 키는 실제로 도메인 모델의 속성이며 도메인 개체의 인스턴스를 고유하게 식별합니다.

개체 수가 증가하는 열(예: ID 열)에 클러스터된 인덱스가 있으면 페이지 분할이 발생하지 않지만 삽입하면 시간이 지남에 따라 인덱스의 균형이 흐트러지므로 정기적으로 인덱스를 재구성해야 합니다(또는 조각화가 특정 임계값에 도달하면).

기본 키가 없는 테이블을 만들려면 아주 좋은 이유가 있어야 합니다.

SQLMenace에서 언급했듯이, 클러스터된 인덱스는 테이블의 물리적 레이아웃에 중요한 열입니다.또한 클러스터된 인덱스, 특히 정수 pk와 같은 마른 열에서 잘 선택된 인덱스를 사용하면 실제로 삽입 성능이 향상됩니다.

키가 아닌 필드를 통해 액세스하는 경우 성능이 변경되지 않을 수 있습니다.그러나 이러한 테이블에 대한 향후 향상된 기능이나 인터페이스를 위해 PK를 유지하는 것이 좋습니다.당신의 애플리케이션은 이 테이블 하나만 사용합니까?

언급URL : https://stackoverflow.com/questions/3459429/is-a-primary-key-necessary-in-sql-server

반응형