데이터 베이스 MySQL 튜토리얼 全局分区索引与局部分区索引

全局分区索引与局部分区索引

Jun 07, 2016 pm 03:28 PM
전반적인 상황 분할 현지의 색인

分区索引 分区索引,有是全局分区索引与局部分区索引,加上一种全局非分区索引(也就是普通索引),加起来共三种。下面我们讨论了这三种索引的组织结构以及应用场景。 1.全局非分区索引可以依赖普通的表,也可以依赖分区表建立。 CREATE INDEX month_ix ON s

分区索引 分区索引,有是全局分区索引与局部分区索引,加上一种全局非分区索引(也就是普通索引),加起来共三种。下面我们讨论了这三种索引的组织结构以及应用场景。

1.全局非分区索引可以依赖普通的表,也可以依赖分区表建立。 CREATE INDEX month_ix ON sales(sales_month); 等同于CREATE INDEX month_ix ON sales(sales_month) GLOBAL;

2.全局分区索引 全局分区索引使用一种有别于底层表的分区机制,意思是索引的分区键可以选择跟表的分区键不一致,但索引的索引键前缀要包含索引的分区键。也就是只有”全局前缀索引“,而没有“全局非前缀索引”。这样,拿了索引分区键做前缀的索引,即使不包含表分区键,也能用于表的unique与primary约束。 建成后有多个段,每个段代表一个索引分区,每个索引分区中的键值可以指向任何表分区。可以依赖普通的表,也可以依赖分区表建立。可能索引分区数不等于表分区数。只能按range或hash(10g起)对索引分区。全局索引的range分区最后一个分区必须是maxvalue,以保证底层表的所有行都能放到这个索引中。 CREATE INDEX month_ix ON sales(sales_month,sales_date) GLOBAL PARTITION BY RANGE(sales_month) (PARTITION pm1_ix VALUES LESS THAN (2), PARTITION pm2_ix VALUES LESS THAN (3), PARTITION pm3_ix VALUES LESS THAN (4), PARTITION pm4_ix VALUES LESS THAN (5), PARTITION pm12_ix VALUES LESS THAN (MAXVALUE));

全局索引建立时global 子句允许指定索引的范围值,这个范围值是索引分区键的范围。全局分区索引的GLOBAL PARTITION BY RANGE(sales_month)的sales_month是指定索引分区键,可以跟表分区键不一样,我行我素地设立分区键,此时sales(sales_month,sales_date)句子,指定索引键,其前缀就必须包含索引分区键了。这一切,都可以跟底层表没啥关系。

使用场景: 对于数据仓库,例如不断有旧数据的删除与新数据的流入(滑动窗口),全局索引很容易失效,使性能受影响。

3.局部分区索引 不能对普通表建这个索引,只能依赖分区表建立,并且是依赖分区表的分区键来建立,即依赖底层表的分区机制来建立索引。随着表分区,建立一一对应的索引分区,每个索引分区中的条目都只指向一个表分区。 CREATE INDEX loc_dept_ix ON dept(deptno) LOCAL; create index dinya_idx_t on dinya_test(item_id) local ( partition idx_1 tablespace tbs1, partition idx_2 tablespace tbs2, partition idx_3 tablespace tbs3 ); 局部分区索引逻辑上可以划分为: 局部前缀索引--表分区键在索引定义的第一列上。例如对表的字段LOAD_DATE进行range分区,而建索引时,LOAD_DATE又是索引的第一列。局部非前缀索引--索引不以表分区键作为它的索引字段的第一列,甚至压根不包含分区键。

局部前缀索引与局部非前缀索引,对分区消除的影响? 首先我们得明白什么是分区消除。一个事务,可以只考虑特定的分区,其余分区就算物理介质损坏,其他分区所在表空间offline等,事务都可以不理会以及不扫描他们。分区消除的种类:表的分区消除,与索引的分区消除。分区消除更多的是为了可用性,以及在出现全表扫与全索引扫的时候,转换为只扫特定的分区以提高性能。 能否使用分区消除,关键在于谓词是否有分区键。如果谓词包含分区键,那可能是实现索引分区消除,也可能是表分区消除。如果谓词不包含分区键,那神马分区消除都是奢想。至于使用的是局部前缀索引还是局部非前缀索引,影响的只是能否实现索引分区消除。用局部前缀索引才能实现索引分区消除,用局部非前缀索引,不能实现“索引分区消除“(但表的分区消除仍然可能实现,但当cbo评估出来要先走索引,却发现索引分区不可用,如所在表空间offline了,此时已不能改路了)。cbo评估代价时,不会考虑分区索引是否可用,评估出一个路径,走下去发现此路不通,也不能走回头路了而直接报错了。

局部前缀索引与局部非前缀索引,对于sql执行性能?如果将索引作为查询计划的第一步,效率上其实并没有什么区别,尽管前缀与非前缀索引会影响到是否能使用分区消除,但分区消除是什么呢?是可用性的提高,以及将全表扫描转为单分区全扫的性能上的优化。所以对于走索引作为第一步,是否分区消除不要紧,从而是否前缀也就不要紧了。

局部前缀索引与局部非前缀索引的选择? 怎么选择,首先应该是能满足需求的。你如果建立一个(b,a)的索引,却总查where a=3,引出很多skip scan那就不好了,此时是应该换成建立(a,b)的索引。 如果仅仅有where a=1 and b=2这样的查询,你可能会问,我们是建(a,b)好还是(b,a)好呢,看哪个字段的选择性好,看我们有没有必要走a的索引分区消除,假如b的密度很大,从1-50000都有,而a只能是1与2,那么我们把b排前面更好。所以将哪个字段放前面,得满足业务需求、综合谓词的分区消除,与字段选择率来选择。

局部索引与唯一约束 分区表字段想用unique或primary key约束,一般是使用全局索引来保证唯一性,这是一般的做法。因为局部索引只保证分区内部的键的唯一性,而不能跨分区,如果你的确想用局部索引来保证整个表的唯一性,就得把分区键加到约束当中,也成。如果oracle允许局部索引(不包含约束的情况)就能轻易来保证全表的唯一性,那么所有的update与insert,都得扫每一个分区,这样可用性与可扩展性都会丧失殆尽。

4.总结 三种索引的选择? OLAP系统中多用局部索引,OLTP系统上,全局索引更为常见。可用性角度:局部索引更可用,就算一个索引分区出问题了也不影响其他,而全局索引很可能会成为一个故障点,一旦出现问题则整个索引都不可用。维护性角度:局部索引更好维护更灵活,DBA决定移动一个表分区,只需要重建与维护一个索引分区。对全局索引,很多情况下都需重建。 sql效率:因为局部索引随表分区,可以涉及出最优的执行计划。

视图 select * from DBA_IND_PARTITIONS where index_name='LOCAL_NOPREFIXED'; select * from DBA_PART_INDEXES where index_name='LOCAL_NOPREFIXED'; select * from DBA_PART_KEY_COLUMNS where name='LOCAL_NOPREFIXED';

实验: --创建表空间tbs1,tbs2,tbs3 create tablespace tbs1 datafile '+DATA6_MIDG'; create tablespace tbs2 datafile '+DATA6_MIDG'; create tablespace tbs3 datafile '+DATA6_MIDG'; SQL> --创建一个range分区表 create table t_part(a int,b int,data char(20)) partition by range (a) (partition p1 values less than(2) tablespace tbs1, partition p2 values less than(3) tablespace tbs2 ); --插入一些数据 insert into t_part select mod(rownum-1,2)+1,rownum,'x' from all_objects; commit; SQL> select * from t_part where rownum --为表收集统计信息 begin dbms_stats.gather_table_stats(user,'t_part',cascade=>TRUE);end; --把tbs2表空间下线,此时可以验证索引分区消除,将tbs1下线,可以验证表分区消除。 alter tablespace tbs3 offline; --再用这种命令来测试 select * from t_part where a=1 and b=1; select * from t_part where b=1; select /*+full(t_part)*/ * from t_part where a=1 and b=1;

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

win11 시스템에서 예약된 파티션을 업데이트할 수 없는 문제 해결 win11 시스템에서 예약된 파티션을 업데이트할 수 없는 문제 해결 Dec 26, 2023 pm 12:41 PM

win11을 업데이트한 후 일부 사용자는 시스템에서 예약한 파티션을 업데이트할 수 없어 더 많은 새 소프트웨어를 다운로드할 수 없는 문제에 직면했습니다. 그래서 오늘은 시스템에서 예약한 파티션을 win11에서 업데이트할 수 없는 문제에 대한 솔루션을 가져왔습니다. 와서 함께 다운로드해 보세요. win11이 시스템에 예약된 파티션을 업데이트할 수 없는 경우 수행할 작업: 1. 먼저 아래 시작 메뉴 버튼을 마우스 오른쪽 버튼으로 클릭합니다. 2. 그런 다음 메뉴를 마우스 오른쪽 버튼으로 클릭하고 실행을 클릭합니다. 3. 작업 중에 diskmgmt.msc를 입력하고 Enter를 누릅니다. 4. 그런 다음 시스템 디스크에 들어가서 EFI 시스템 파티션을 확인하여 공간이 300M 미만인지 확인할 수 있습니다. 5. 너무 작은 경우 도구를 다운로드하여 시스템 예약 파티션을 300MB 이상으로 변경하는 것이 좋습니다.

[Linux 시스템] fdisk 관련 파티션 명령. [Linux 시스템] fdisk 관련 파티션 명령. Feb 19, 2024 pm 06:00 PM

fdisk는 디스크 파티션을 생성, 관리 및 수정하는 데 일반적으로 사용되는 Linux 명령줄 도구입니다. 다음은 일반적으로 사용되는 fdisk 명령입니다. 디스크 파티션 정보 표시: fdisk-l 이 명령은 시스템에 있는 모든 디스크의 파티션 정보를 표시합니다. 작동하려는 디스크를 선택하십시오: fdisk/dev/sdX /dev/sdX를 작동하려는 실제 디스크 장치 이름(예: /dev/sda)으로 바꾸십시오. 새 파티션 만들기:n 새 파티션을 만드는 방법을 안내합니다. 프롬프트에 따라 파티션 유형, 시작 섹터, 크기 및 기타 정보를 입력하십시오. 파티션 삭제:d 삭제하려는 파티션을 선택하도록 안내합니다. 프롬프트에 따라 삭제할 파티션 번호를 선택하십시오. 파티션 유형 수정: 유형을 수정하려는 파티션을 선택하도록 안내합니다. 언급에 따르면

Oracle 인덱스 유형은 무엇입니까? Oracle 인덱스 유형은 무엇입니까? Nov 16, 2023 am 09:59 AM

Oracle 인덱스 유형은 다음과 같습니다. 1. B-트리 인덱스, 3. 함수 인덱스, 5. 역방향 키 인덱스, 7. 도메인 인덱스, 비트맵 연결 인덱스 10. 복합 인덱스. 세부 소개: 1. B-트리 인덱스는 동시 작업을 효율적으로 지원할 수 있는 자체 균형 트리 데이터 구조입니다. Oracle 데이터베이스에서 B-트리 인덱스는 가장 일반적으로 사용되는 인덱스 유형입니다. 2. 비트 그래프 인덱스는 인덱스 유형 기반입니다. 비트맵 알고리즘 등에 관한 것입니다.

win10 설치 후 파티션이 안되는 문제 해결 방법 win10 설치 후 파티션이 안되는 문제 해결 방법 Jan 02, 2024 am 09:17 AM

win10 운영 체제를 다시 설치했을 때 디스크 파티셔닝 단계에서 시스템에서 새 파티션을 생성할 수 없으며 기존 파티션을 찾을 수 없다는 메시지를 표시하는 것을 발견했습니다. 이런 경우에는 하드디스크 전체를 다시 포맷하고 시스템을 파티션에 다시 설치하거나, ​​소프트웨어 등을 통해 시스템을 다시 설치해 보시는 것도 좋을 것 같습니다. 특정 콘텐츠에 대해 편집자가 어떻게 작업했는지 살펴보겠습니다~ 도움이 되었으면 좋겠습니다. win10을 설치한 후 새 파티션을 만들 수 없는 경우 방법 1: 전체 하드 디스크를 포맷하고 다시 파티션을 나누거나 USB 플래시 드라이브를 여러 번 연결 및 분리한 후 새로 고쳐 보십시오. , 파티션 나누기 단계에서는 하드 디스크의 모든 데이터를 삭제합니다. 파티션이 삭제되었습니다. 전체 하드 드라이브를 다시 포맷한 후 다시 파티션을 나눈 후 정상적으로 설치하세요. 방법 2: P

Linux Opt 파티션 설정 방법에 대한 자세한 설명 Linux Opt 파티션 설정 방법에 대한 자세한 설명 Mar 20, 2024 am 11:30 AM

Linux Opt 파티션 및 코드 예제를 설정하는 방법 Linux 시스템에서 Opt 파티션은 일반적으로 선택적 소프트웨어 패키지 및 응용 프로그램 데이터를 저장하는 데 사용됩니다. Opt 파티션을 올바르게 설정하면 시스템 리소스를 효과적으로 관리하고 디스크 공간 부족과 같은 문제를 피할 수 있습니다. 이 기사에서는 LinuxOpt 파티션을 설정하는 방법을 자세히 설명하고 특정 코드 예제를 제공합니다. 1. 파티션 공간 크기 결정 먼저 Opt 파티션에 필요한 공간 크기를 결정해야 합니다. 일반적으로 Opt 파티션의 크기를 전체 시스템 공간의 5%-1로 설정하는 것이 좋습니다.

Windows 11에서 WinRE 파티션 크기를 늘리는 방법 Windows 11에서 WinRE 파티션 크기를 늘리는 방법 Feb 19, 2024 pm 06:06 PM

이 기사에서는 Windows 11/10에서 WinRE 파티션 크기를 변경하거나 늘리는 방법을 보여줍니다. Microsoft는 이제 Windows 11 버전 22H2부터 월별 누적 업데이트와 함께 Windows 복구 환경(WinRE)을 업데이트할 예정입니다. 그러나 모든 컴퓨터에 새 업데이트를 수용할 만큼 큰 복구 파티션이 있는 것은 아니며 이로 인해 오류 메시지가 나타날 수 있습니다. Windows 복구 환경 서비스가 실패했습니다. Windows 11에서 WinRE 파티션 크기를 늘리는 방법 컴퓨터에서 WinRE 파티션 크기를 수동으로 늘리려면 아래에 설명된 단계를 따르세요. WinRE 확인 및 비활성화 OS 파티션 축소 새 복구 파티션 생성 파티션 확인 및 WinRE 활성화

win10 파티션 조각 모음을 위한 정수 계산 솔루션 win10 파티션 조각 모음을 위한 정수 계산 솔루션 Dec 30, 2023 pm 07:41 PM

Windows에서 파티션을 나눌 때 계산된 값을 1GB=1024MB로 입력하면 항상 정수 대신 259.5GB/59.99GB/60.01GB와 같은 결과가 나타납니다. 그러면 win10 파티션 정수는 어떻게 계산됩니까? 아래 에디터와 함께 살펴보겠습니다. win10 파티션의 정수 계산 공식: 1. 공식은 (X-1)×4+1024×X=Y입니다. 2. Windows의 정수 파티션을 구하려면 공식을 알아야 합니다. 이 공식을 통해 계산된 값은 Windows에서 정수 GB 값으로 인식될 수 있습니다. 3. 그 중 X는 얻고자 하는 정수 파티션의 값, 단위는 GB, Y는 파티셔닝 시 입력해야 하는 숫자이다.

Deepin Linux 하드 디스크 파티셔닝 및 설치 튜토리얼: 효율적인 시스템 배포를 위한 단계별 Deepin Linux 하드 디스크 파티셔닝 및 설치 튜토리얼: 효율적인 시스템 배포를 위한 단계별 Feb 10, 2024 pm 07:06 PM

Deepin Linux를 설치하기 전에 하드 디스크를 분할해야 합니다. 하드 디스크 분할은 물리적 하드 디스크를 여러 논리적 영역으로 나누는 프로세스입니다. 올바른 분할 방법은 성능과 성능을 향상시킬 수 있습니다. 안정성이 있으므로 이 단계는 매우 중요합니다. 이 문서에서는 자세하고 심층적인 Linux 하드 디스크 파티셔닝 및 설치 튜토리얼을 제공합니다. 준비 1. 파티션을 나누면 하드 드라이브의 모든 데이터가 지워지므로 중요한 데이터를 백업했는지 확인하십시오. 2. USB 플래시 드라이브, CD 등 Deepin Linux 설치 미디어를 준비합니다. 하드 디스크 파티션 1. BIOS 설정으로 부팅하고 부팅 미디어를 기본 부팅 장치로 설정합니다. 2. 컴퓨터를 다시 시작하고 부팅 미디어에서 부팅하여 시스템 설치 인터페이스로 들어갑니다. 3.선택

See all articles