동일한 테이블에 여러 인덱스를 동시에 만들 수 있는 데이터베이스가 있습니까?
오라클에서는 불가능한 일이라고 확신하지만, 틀렸다는 것이 증명되고 싶습니다.
예를 들어 열이 많은 큰 테이블이 있는데 열 두어 개 정도의 열에 인덱스를 만들고 싶다고 합시다.오라클을 이용해서 여러 개의 순차적인 발사를 할 겁니다.create index
진술하고 나가서 주전자를 끓입니다.
각각create index
테이블의 모든 행을 스캔하여 인덱스를 형성해야 합니다.
즉, 인덱스 10개 = 전체 스캔 10개입니다.
표를 한 번 스캔하고 열 열 열을 동시에 색인화하는 것이 명백한 최적화라고 생각할 수 있습니다.안 그래요?
create indexes on mytable (
ix_mytable_cola (cola),
ix_mytable_colb (colb),
ix_mytable_colc (colc)
);
그것이 존재하지 않는 데에는 상당한 이유가 있을 것입니다.
무슨 생각 있어요?
각각 발사할 수 있습니다.create index
별도의 세션에서 동시에 데이터베이스 버퍼 캐시가 하루를 살렸지만 가능성은 희박해 보입니다.
편집
확실한 답변을 얻지 못했기 때문에 Oracle-L에 대해서도 같은 질문을 했습니다.
http://www.freelists.org/post/oracle-l/Creating-multiple-indexes
사용할 수는 없지만 유용한 기능이 될 것이라는 것이 일반적인 공감대였습니다.가장 유용한 답변은 David Aldridge가 create index 문을 동시에 모두 시작할 경우 Oracle이 '적절한 작업을 수행'할 것이라고 제안한 것입니다.
오라클이나 다른 DBMS에서는 가능하지 않다고 생각합니다. 그러나 오라클에서는 다음과 같은 옵션을 사용하여 인덱스 생성 속도를 높일 수 있습니다.PARALLEL
그리고.NOLOGGING
.
PARALLEL
처리를 다른 CPU와 병렬화할 수 있습니다.
NOLOGGING
redo 로그(사용자에게 적합하지 않을 수 있음)에 쓰는 것을 포기합니다.
CREATE INDEX some_idx
ON a_table(col1, col2, col3)
PARALLEL 3
NOLOGGING;
Oracle의 경우 no라는 답변이 있으며, 제가 조사한 바에 따르면 DB2의 경우 no라는 답변도 있습니다.다른 사람들이 그런 특징을 가지고 있는지는 의문입니다.
예제에서는 여러 개의 단일 열 인덱스가 있으므로 다음 제안이 적용되지 않습니다.하지만 특정한 경우에 인덱스 생성 시간을 줄이는 방법을 보여주는 사례이기 때문에 어쨌든 지적하고 싶었습니다.
작성 중인 색인과 동일한 순서로 테이블 행이 물리적으로 정렬된 경우, 색인 작성 문에 "NOSORT" 옵션을 지정할 수 있습니다.이렇게 하면 Oracle은 인덱스를 생성하는 동안 행을 정렬할 필요가 없습니다(이 정렬이 Disk로 유출되면 킬러가 됩니다).
이 기능은 일반적으로 빈 테이블(또는 CTAS)을 만들고 행을 특정 순서대로 삽입한 다음(순서에 의해 강제됨) 문장에 의해 순서와 동일한 열 순서를 사용하여 인덱스를 직접 만들 때 유용합니다.
2008년 3월 데이비드 올드리지가 블로그에 올린 글을 보고...
언급URL : https://stackoverflow.com/questions/4174940/do-any-databases-allow-multiple-indexes-on-the-same-table-to-be-created-simultan
'programing' 카테고리의 다른 글
404를 유사한 URL로 리디렉션 (0) | 2023.09.28 |
---|---|
문자열 보간 대 문자열.서식 (0) | 2023.09.28 |
Piwik 사용자 정의 변수별 필터 그래프 (0) | 2023.09.28 |
SQL "LIKE" 문과 동등한 SQL Lchemy (0) | 2023.09.28 |
Web Api + HttpClient:비동기 작업이 보류 중인 동안 비동기 모듈 또는 핸들러가 완료되었습니다. (0) | 2023.09.28 |