MySQL 5.0 인덱스 - 고유 대 고유하지 않음
성능 면에서 MySQL 고유 인덱스와 고유하지 않은 인덱스의 차이점은 무엇입니까?
예를 들어 두 열의 조합에 인덱스를 만들고 싶은데 조합은 고유하지만 고유하지 않은 인덱스를 만듭니다.그것이 MySQL이 사용하는 성능이나 메모리에 큰 영향을 미칩니까?
같은 질문입니다만, 프라이머리 키와 고유 인덱스는 차이가 있습니까?
UNIQURE 및 PRIMAY KEY는 제약사항이며 인덱스가 아닙니다.대부분의 데이터베이스는 색인을 사용하여 이러한 제약을 구현합니다.인덱스 외에 제약조건의 추가 오버헤드는 중요하지 않습니다.특히 의도하지 않은 중복이 발생했을 때 추적하고 수정하는 데 드는 비용은 중요하지 않습니다.
일반적으로 색인은 선택성이 높은 경우에 더 효과적입니다.이것은 행의 총수에 대한 고유 값 수의 비율입니다.
예를 들어, 사회 보장 번호 열에 100만 개의 고유한 값을 가진 100만 개의 행이 있을 수 있습니다.따라서 선택성은 1000000/squal00 = 1.0입니다(희귀한 과거 예외도 있지만 SSN은 고유하도록 설계되었습니다).
그러나 이 표의 또 다른 열인 "젠더"는 100만 행이 넘는 두 개의 다른 값만 가질 수 있습니다.2/1400 = 매우 낮은 선택성.
UNIQURE 또는 PRIMAY KEY 제약이 있는 인덱스는 선택성이 1.0임을 보증하므로 인덱스가 가능한 한 항상 유효합니다.
기본 키와 고유한 제약 조건의 차이에 대해 질문했습니다.기본적으로 테이블당 1개의 프라이머리 키 제약조건을 가질 수 있습니다(그 제약조건의 정의에 여러 개의 열이 포함되어 있는 경우에도 마찬가지).한편, 복수의 고유한 제약조건을 가질 수 있습니다.고유한 제약 조건이 있는 열은 NULL을 허용할 수 있지만 기본 키 제약 조건의 열은 NULL을 허용하지 않아야 합니다.그렇지 않으면 기본 키와 고유 키는 구현 및 용도가 매우 유사합니다.
MyISAM을 사용할지 InnoDB를 사용할지에 대해 코멘트로 문의하셨습니다.MySQL에서는 스토리지 엔진이라는 용어를 사용합니다.이 두 스토리지 엔진 사이에는 여러 가지 미묘한 차이가 있지만, 주요 차이점은 다음과 같습니다.
- InnoDB는 트랜잭션을 지원하므로 롤백 또는 변경 커밋을 선택할 수 있습니다.MyISAM은 실질적으로 항상 자동 커밋입니다.
- InnoDB는 외부 키 제약을 적용합니다.MyISAM은 외부 키 제약을 적용하거나 저장하지 않습니다.
이러한 기능이 어플리케이션에서 필요한 것이라면 InnoDB를 사용해야 합니다.
당신의 코멘트에 대한 답변은 그렇게 간단하지 않습니다.InnoDB는 실제로 MyISAM보다 훨씬 빠르기 때문에 선택, 업데이트, 동시 쿼리, 인덱스, 버퍼 구성 등의 응용 프로그램의 조합에 따라 달라집니다.
스토리지 엔진의 상세한 퍼포먼스 비교에 대해서는, http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ 를 참조하십시오.InnoDB는 MyISAM을 자주 이기므로 어느 쪽이 다른 쪽보다 빠르다고 말할 수 없습니다.
대부분의 퍼포먼스 관련 질문과 마찬가지로 어플리케이션에 대한 답변은 어플리케이션과 대표적인 샘플 데이터를 사용하여 양쪽 구성을 테스트하고 결과를 측정하는 방법밖에 없습니다.
비고유성 지수에 대해서요? 그리고 비고유성 지수에 대해서요?확실하진 않지만, 많지는 않을 것 같아요.낙관자는 지수의 카디널리티를 검사하고 그것을 사용해야 한다(고유 지수의 경우 항상 행의 수일 것이다).
기본 키에 관한 한, 아마도 꽤 많을 것입니다만, 어떤 엔진을 사용하느냐에 따라 다릅니다.
InnoDB 엔진(많은 사용자가 사용)은 항상 기본 키에 행을 클러스터링합니다.즉, PK는 기본적으로 실제 행 데이터와 결합됩니다.PK(또는 실제로 범위 스캔 등)로 검색을 많이 하는 경우에는 디스크에서 블록을 많이 가져올 필요가 없기 때문에 좋은 방법입니다.
PK가 아닌 고유 인덱스는 InnoDB에 클러스터링되지 않습니다.
한편, 일부 다른 엔진(특히 MyISAM)은 PK를 클러스터하지 않기 때문에 프라이머리 키는 일반적인 고유 인덱스와 동일합니다.
언급URL : https://stackoverflow.com/questions/388982/mysql-5-0-indexes-unique-vs-non-unique
'programing' 카테고리의 다른 글
경고: mysql_connect(): [2002]에 이러한 파일 또는 디렉토리가 없습니다(unix:///tmp/mysql.sock 경유로 접속하려고 합니다). (0) | 2022.10.03 |
---|---|
Argparse:'--help'에 기본값을 포함하는 방법? (0) | 2022.10.03 |
Symfony 2에 JSON 개체 게시 (0) | 2022.10.03 |
테이블의 기본 키를 얻는 방법 (0) | 2022.10.03 |
OutputStream에서 InputStream을 생성하는 가장 효율적인 방법 (0) | 2022.10.03 |