2013-05-09 3 views
0

10 억 개의 레코드가있는 테이블에 새 열을 추가하려고합니다. select 문을 빠르게 처리하려면이 열과 PK 열이 포함될 새 색인을 추가해야합니다.10 억 개의 레코드가있는 테이블에 새로운 열과 인덱스 추가

  1. 10 억 개의 레코드 테이블에 새 인덱스를 추가하는 데 얼마나 걸립니까?
  2. 예를 들어 [Field]와 같은 새 열은 값이 0,1,2,9가됩니다. 레코드의 대부분은 9입니다. 선택 조건 필드 = 0 또는 필드 = 1 또는 필드 = 2가 사용되지만 필드 = 9는 사용되지 않습니다. 억 기록 테이블의 예를 들어

    , 값이 0 레코드

    • 필드 : 100000;
    • 값이 1 인 필드 : 100,000;
    • 값이 2 인 레코드 필드 : 100,000; 값 9 레코드
    • 필드 : 억 30 만
  3. 내가 컬럼에 인덱스를 생성해야 하는가? 그렇지 않은 경우 Field = 0 조건을 포함하는 select sql이 너무 느려 결과를 반환하지 않습니까?

답변

1

대부분의 값은 9의 다음과 색인에 그들을 포함하여 피할 수있는 경우 쿼리에 다음

create index my_index on my_table (case column_name when 9 then null else column_name end); 

...

select ... 
from ... 
where case column_name when 9 then null else column_name end = 2 

... 예 : .

소요 시간은 전체 테이블을 스캔 한 다음 색인에 포함될 300,000 개의 레코드를 정렬하는 데 필요한 시간입니다. 병렬 색인 빌드를 사용하면 더 빠릅니다.

관련 문제