2008-11-14 6 views

답변

5

인덱스가 NULL 인 것처럼 보입니다. 당신이 MySQL이 인덱스를 만드는 동안 쓰기에 대한 테이블을 LOCK 것이다이 때문에 실행할 때

하는 것은주의해야합니다. 인덱스 작성은 열이 비어있는 경우 (모두 null 임) 큰 테이블에서 시간이 걸릴 수 있습니다.

Reference.

+2

어떻게 결론에 도달 했습니까? 주제에 대한 언급이 없습니다. –

+0

기사 하단에 주석이 달려있었습니다. 나는 관련 부분을 뽑았다. –

+5

커다란 테이블에서 오랜 시간이 걸리는 이유는 MySQL이 전체 테이블을 읽어야하기 때문입니다. 거대한 인덱스를 구축하고 있기 때문에가 아닙니다. 내가 틀렸을 수도있다. –

1

아니요, 계속 포함 시키지만 결과가 어떤 경우인지에 대해 너무 많은 가정을하지 마십시오. 많은 것은 다른 값의 범위 (Google에서 "카디널리티")에 따라 다릅니다.

MSSQL에는 이러한 유형의 상황 (즉, 필터를 기반으로하는 인덱스의 레코드 포함)에 대해 "필터링 된 인덱스"라는 새로운 인덱스 유형이 있습니다. dBASE 타입의 시스템은 비슷한 기능을 가지고 있었고 꽤 편리했습니다.

2

열을 null로 허용하면 열의 저장소 요구 사항에 바이트가 추가됩니다. 이렇게하면 인덱스 크기가 커져서 좋지 않을 수 있습니다. 그것은 많은 쿼리가 "IS NULL"또는 "NOT NULL"을 사용하도록 변경된 경우 값 비교보다 전반적으로 빠를 것이라고 말합니다.

내 직감이 null이 아니라고 말하지만 한 가지 대답이 있습니다. 테스트! COL_NAME에서 동일한 최적화를 수행 할 수

+3

-1 이것은 질문에 대답하지 않습니다. – user359996

+1

인덱스의 크기가 증가할지 여부는 문제입니다. 대답은 두 번째 문장에서 색인 크기가 증가한다는 것입니다. –

+3

* title *은 (는) MySQL이 null 열을 색인화하는지 여부를 묻습니다. * 설명 *은 다소 다른 질문을하는 것 같지만, 처음에는 (제목) 질문이 왜 제기되었는지에 대한 설명 일뿐입니다. 또한 사람들은 주로 제목을 기반으로 질문을 읽는지 여부를 선택하기 때문에 제목 양식이 대부분의 경우 설명 양식보다 우선합니다. – user359996

13

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

MySQL은 그것이 COL_NAME = constant_value 사용할 수 NULL이다. 예를 들어, MySQL은 인덱스와 범위를 사용하여 IS NULL로 NULL을 검색 할 수 있습니다.

+0

설명서에 몇 가지주의 사항이 포함되어 있습니다. "최적화는 하나의 IS NULL 만 처리 할 수 ​​있습니다". – Timo

0

각 인덱스에는 카디널리티가 있습니다. AFAIK 인덱스가 많은 행에 대해 동일한 값을 반복한다고 말하는 것은 합리적이지 않습니다.하지만 인덱스는 많은 행 (이 필드에 대해 null 값을 갖는 행)의 클러스터 된 인덱스에 대한 반복 값을 처리하고 클러스터 된 인덱스의 참조 ID를 유지합니다 의미 : NULL 값 인덱스 필드가있는 각 행은 PK만큼 큰 크기를 낭비합니다 (이 이유 때문에 전문가는 복합 PK가있는 경우 합리적인 PK 크기를 권장합니다).

관련 문제