source

MySQL은 NULL 값을 인덱싱합니까?

itover 2023. 1. 5. 20:26
반응형

MySQL은 NULL 값을 인덱싱합니까?

MySQL 테이블이 있는데, 이 테이블에는 인덱스가 되어 있습니다.INT행의 90%에 대해 열은 0이 됩니다.이 행을 사용하도록 변경하면NULL0 대신 지수에서 제외되어 지수가 약 90% 더 작아질까요?

http://dev.mysql.com/doc/refman/5.0/en/is-null-optimization.html

MySQL은 다음에서 동일한 최적화를 수행할 수 있습니다.col_name IS NULL에 사용할 수 있습니다.col_name = constant_value예를 들어 MySQL은 인덱스와 범위를 사용하여 다음을 검색할 수 있습니다.NULL와 함께IS NULL.

이 색인이 있는 것 같습니다.NULL그것도 그렇고.

인덱스 작성 중에 MySQL이 WRITE 테이블을 잠그므로 이 작업을 실행할 때 주의하십시오.큰 테이블에서는 열이 비어 있어도 인덱스 작성에 시간이 걸릴 수 있습니다(모두 null).

레퍼런스

열을 null로 허용하면 열의 스토리지 요구 사항에 바이트가 추가됩니다.이로 인해 지수 크기가 증가하여 좋지 않을 수 있습니다.즉, "를 사용하도록 많은 쿼리를 변경할 경우IS NULL" 또는 "NOT NULL"은 값 비교보다 전체적으로 빠를 수 있습니다.

내 직감으로는 아무것도 아니라고 할 수 있지만, 한가지 답이 있다: 테스트!

아니요, 계속 포함되겠지만, 어느 경우든 결과가 어떻게 될지에 대해 너무 많은 추측을 하지 마세요.많은 부분이 다른 값의 범위에 따라 달라집니다('카디널리티'의 구글).

MSSQL에는 이러한 유형의 상황에 대해 "필터링된 인덱스"라고 불리는 새로운 인덱스 유형이 있습니다(즉, 필터에 기반한 인덱스에 레코드가 포함됩니다).dBASE 유형 시스템에는 유사한 기능이 사용되었으며 매우 편리했습니다.

각 지수에는 카디널리티가 있습니다. 즉, 지수화된 개별 값의 수를 의미합니다.AFAIK 인덱스가 여러 행에 대해 동일한 값을 반복한다고 말하는 것은 합리적 생각은 아니지만 인덱스는 여러 행의 클러스터된 인덱스(이 필드의 null 값을 가진 행)에만 반복된 값을 지정하고 클러스터된 인덱스 평균의 참조 ID를 유지합니다. NULL 값 인덱스 필드가 있는 각 행은 PK 크기만큼 낭비합니다.이러한 이유로 전문가들은 복합 PK)가 있는 경우 적절한 PK 크기를 사용하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/289001/does-mysql-index-null-values

반응형