복붙노트

[SQL] 기본 키는 SQL Server의 필요가 있습니까?

SQL

기본 키는 SQL Server의 필요가 있습니까?

이것은 꽤 순진하고 바보 같은 질문 일 수도 있지만 어쨌든 그것을 물어 갈거야

나는 고유 어느 것도 여러 분야, 그리고 분명히 기본 키와 테이블이있다.

이 테이블은 정기적으로 고유하지 않은 필드를 통해 액세스되지만, 기본 키를 통해 어떤 사용자 SP 또는 프로세스 데이터에 액세스. 기본 키는 필요합니까? 이 장면 뒤에 사용되어 있습니까? 이 긍정적 또는 부정적 성능에 영향을 제거 할 것인가?

해결법

  1. ==============================

    1.필요한? 무대 뒤에서 사용 번호? 음,이 디스크에 저장 그리고 약간의 성능 향상 (통지에 밀리 초 정밀도로 시계를 사용) 것입니다 제거 등 행 캐시에 보관.

    필요한? 무대 뒤에서 사용 번호? 음,이 디스크에 저장 그리고 약간의 성능 향상 (통지에 밀리 초 정밀도로 시계를 사용) 것입니다 제거 등 행 캐시에 보관.

    하지만 ... 누군가가이 테이블에 대한 참조를 만들 필요가 다음 번에, 그들은 당신을 저주 할 것이다. 그들은 용감 경우, 그들은 PK를 추가 (그리고 열을 만들 수있는 DB에 대한 오랜 시간 대기)합니다. 그들은 용감하거나 멍청하지 않는 경우, 그들은 유지 보수 악몽의 원인이됩니다 비즈니스 키 (즉 데이터 열)를 사용하여 참조를 만들기 시작합니다.

    결론 : (이 ATM을 사용 아니더라도)이 PK를 갖는 비용이 너무 작기 때문에, 그것이 될 수 있습니다.

  2. ==============================

    2., 혹시 PK에 가입 할 어떤 외부 키가 있습니까?

    , 혹시 PK에 가입 할 어떤 외부 키가 있습니까?

    이에 대한 대답은 전혀 없으며, 앱의 PK하여 테이블에서 항목을 검색하지, 어떤 쿼리가 이제까지 그러므로 당신은 단지 다음, PK를하는 IDENTITY 열을 추가, where 절에 사용하지 않는 경우 :

    당신이 NC 인덱스가있는 경우, 당신은 좁은 인공 클러스터 키 (신원 PK)을 가지고 있다는 사실은 그 인덱스합니다 (CDX 키는 모든 NC 잎 슬롯 재현) 좁힐 유지에 도움이된다. 당신이 중요한 NC 색인이있는 경우 PK 그래서, 사용하지 않을 경우에도 도움이된다.

    당신이 널리 액세스 패턴, 능가 특정 쿼리가있는 경우 반면에, 다른 모든 주파수 및 중요성, 또는 중요한 타임 코드 경로의 일부 (예. 사이트의 모든 페이지 방문에서 쿼리 실행 인이다 또는 앱 등으로 매 초마다) 다음 쿼리는 클러스터 키 순서를 지시 할 수있는 좋은 후보입니다.

    테이블이 거의 쿼리 없지만 경우 그리고 마지막으로, 종종 다음은 힙이 훨씬 더 삽입에서 너무이기 때문에 힙에 대한 좋은 후보 (전혀 클러스터 키) 될 수있다 기록. 힙 대 클러스터 된 인덱스로 구성 테이블을 비교 참조하십시오.

  3. ==============================

    3.기본 키는 장면 (비 클러스터형 인덱스로 생성하지 않는 한 기본적으로) 클러스터 된 인덱스 뒤에 모두에게 테이블에 대한 데이터를 보유하고 있습니다. 약동학은 ID 열 경우 삽입이 순차적으로 일어날 것이며, 어떤 페이지 분할이 발생하지 않습니다.

    기본 키는 장면 (비 클러스터형 인덱스로 생성하지 않는 한 기본적으로) 클러스터 된 인덱스 뒤에 모두에게 테이블에 대한 데이터를 보유하고 있습니다. 약동학은 ID 열 경우 삽입이 순차적으로 일어날 것이며, 어떤 페이지 분할이 발생하지 않습니다.

    모든에서 id 컬럼에 액세스하지 않는 경우 그러나 당신은 아마 다른 컬럼에 어떤 인덱스를 추가 할. 또한 당신은 PK를 할 수 있습니다 설치 FK 관계가있을 때

  4. ==============================

    4.논리적 모델에서, 테이블은 적어도 하나의 키가 있어야합니다. arbitarily 키 중 하나가 '차'로 지정 할 이유가 없다; 모든 키는 동일하다. '기본 키'의 개념은 테드 커드의 초기 작품에 다시 추적 할 수 있지만, 실수는 초기에 포착 된 긴 관계 이론에 수정되었습니다.

    논리적 모델에서, 테이블은 적어도 하나의 키가 있어야합니다. arbitarily 키 중 하나가 '차'로 지정 할 이유가 없다; 모든 키는 동일하다. '기본 키'의 개념은 테드 커드의 초기 작품에 다시 추적 할 수 있지만, 실수는 초기에 포착 된 긴 관계 이론에 수정되었습니다.

    슬프게도, PRIMARY KEY는 SQL에 그것의 방법을 발견하고 우리는 이후로 그것으로 살아야했습니다. SQL 테이블은 중복 행을 가질 수 있고, 당신은 또한 테이블로 SELECT 쿼리의 결과 집합을 고려하는 경우, 다음 SQL 테이블도 duplciate 행을 가질 수 있습니다. 관계 이론가들은 SQL을 많이 싫어한다. 그러나 SQL이 있습니다해서 당신은 당신이 실제로 할 필요가 있음을 의미하지 않는다 엉뚱한 비 관계형 모든 종류의 것들을 수행. 모든 SQL 테이블은 적어도 하나의 키를 가지고 있는지 확인하는 것이 좋습니다입니다.

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

    당신은 SQL에서 키를 적용하는 조합 UNIQUE (제약보다는 인덱스) 및 NOT NULL을 사용할 수 있습니다. 그러므로, 기본 키 (또는 PRIMARY KEY)는 SQL 서버에서 필요하지 않습니다.

  5. ==============================

    5.나는 차 키없이 테이블이되지 않을 것입니다. 어떻게 제거하고 어떤을 유지하는 하나의 식별 것 - 혹시 중복을 제거해야한다고 가정?

    나는 차 키없이 테이블이되지 않을 것입니다. 어떻게 제거하고 어떤을 유지하는 하나의 식별 것 - 혹시 중복을 제거해야한다고 가정?

  6. ==============================

    6.정의 된 기본 키는 인덱스와 관계에 대한 데이터베이스 내에서 성능을 개선하는 데 도움이됩니다.

    정의 된 기본 키는 인덱스와 관계에 대한 데이터베이스 내에서 성능을 개선하는 데 도움이됩니다.

    난 항상 당신이 당신의 응용 프로그램을 확장하기 시작할 때, 당신은 당신이 실제로 필요합니까 찾을 수 있기 때문이다 상관없이 내가 그것을 액세스하는 경우 또는하지, 내 모든 테이블에 정수를 증가 자동으로 기본 키를 정의하는 경향, 그리고 인생은 훨씬 간단합니다.

  7. ==============================

    7.기본 키는 진짜로 당신의 도메인 모델의 속성이며, 고유 도메인 객체의 인스턴스를 식별합니다.

    기본 키는 진짜로 당신의 도메인 모델의 속성이며, 고유 도메인 객체의 인스턴스를 식별합니다.

    발생하지 않는 페이지 분할을 의미합니다 (예 : ID 열 등) montonically 증가 열에 클러스터 된 인덱스를 갖는 단, 삽입 시간이 지남에 인덱스를 불균형 것이다 따라서 인덱스의 요구를 재건하는 것은 완료 regulary에 수 (또는 조각이 특정 임계 값에 도달하면) .

    나는 차 키없이 테이블을 만들 수있는 아주 좋은 이유가 있어야합니다.

  8. ==============================

    8.PK가 필요하지 않습니다.

    PK가 필요하지 않습니다.

    그러나 당신은 당신이 (즉 WHERE 절에 나타나는) 쿼리에 사용하는 컬럼에 고유하지 않은 인덱스를 배치하는 것을 고려해야한다. 이것은 상당히 조회 성능을 높일 것입니다.

  9. ==============================

    9.당신은 키가 아닌 필드를 통해 그들에 액세스하는 경우 성능은 아마 변경되지 않습니다. 그러나 이러한 테이블에 대한 향후 개선 사항 또는 인터페이스의 PK를 유지하는 좋은 수 있습니다. 응용 프로그램은이 하나 개의 테이블을 사용합니까?

    당신은 키가 아닌 필드를 통해 그들에 액세스하는 경우 성능은 아마 변경되지 않습니다. 그러나 이러한 테이블에 대한 향후 개선 사항 또는 인터페이스의 PK를 유지하는 좋은 수 있습니다. 응용 프로그램은이 하나 개의 테이블을 사용합니까?

  10. ==============================

    10.SQLMenace 말했듯이, 클러스터 된 인덱스는 테이블의 물리적 레이아웃을위한 중요한 열입니다. 또한, 클러스터 된 인덱스를 갖는, 특히 잘 실제로 삽입 성능 증가 정수 PK 등 마른 열을 선택.

    SQLMenace 말했듯이, 클러스터 된 인덱스는 테이블의 물리적 레이아웃을위한 중요한 열입니다. 또한, 클러스터 된 인덱스를 갖는, 특히 잘 실제로 삽입 성능 증가 정수 PK 등 마른 열을 선택.

  11. from https://stackoverflow.com/questions/3459429/is-a-primary-key-necessary-in-sql-server by cc-by-sa and MIT license