search
HomeDatabaseMysql Tutorial全局分区索引与局部分区索引
全局分区索引与局部分区索引Jun 07, 2016 pm 03:28 PM
overall situationPartitionlocalindex

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

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
解决win11系统保留分区无法更新的问题解决win11系统保留分区无法更新的问题Dec 26, 2023 pm 12:41 PM

在更新了win11后有些用户遇到了无法更新系统保留的分区,导致没法使用下载更多的新软件,所以今天就给你们带来了win11无法更新系统保留的分区解决方法,赶快来一起下载试试吧。win11无法更新系统保留的分区怎么办:1、首先右击下方的开始菜单按键。2、然后右击菜单点击运行。3、在运行中输入:diskmgmt.msc回车。4、之后可以进入系统磁盘,查看EFI系通分区,查看空间是否小于300M。5、如果太小可以下载工具将系统预留分区改成大于300MB建议450M即可。

win10安装后无法分区的解决方法win10安装后无法分区的解决方法Jan 02, 2024 am 09:17 AM

我们再重装win10操作系统的时候,到了磁盘分区的步骤却发现出现系统提示无法创建新的分区也找不到现有分区。对于这种情况小编觉得可以尝试将整个硬盘重新进行格式化再次安装系统进行分区,或者通过软件重新进行系统安装等等。具体内容就来看看小编是怎么做的吧~希望可以帮助到你。安装win10无法创建新的分区怎么办方法一:格式化整个硬盘重新分区或尝试插拔U盘几次并刷新,如果你的硬盘上没有重要数据的话,到了分区这一步时,将硬盘上的所有分区都删除了。重新格式化整个硬盘,然后重新分区,再进行安装就正常了。方法二:P

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是分区时应该输入的数

深度Linux硬盘分区及安装教程:一步步实现系统的高效部署深度Linux硬盘分区及安装教程:一步步实现系统的高效部署Feb 10, 2024 pm 07:06 PM

在进行深度Linux的安装之前,我们需要对硬盘进行分区,硬盘分区是将一块物理硬盘划分为多个逻辑区域的过程,每个区域可以独立使用和管理,正确的分区方式可以提高系统的性能和稳定性,因此这一步非常重要,本文将为您提供详细的深度Linux硬盘分区及安装教程。准备工作1.确保您已经备份了重要的数据,因为分区过程会清除硬盘上的所有数据。2.准备一个深度Linux的安装媒介,例如U盘或光盘。硬盘分区1.开机进入BIOS设置,将启动媒介设置为首选启动设备。2.重启计算机,从启动媒介引导进入系统安装界面。3.选择

CentOS安装Gunicorn及CentOS安装分区教程CentOS安装Gunicorn及CentOS安装分区教程Feb 10, 2024 pm 09:20 PM

LINUX是一个强大的操作系统,被广泛应用于服务器和开发环境,CentOS是基于RedHatEnterpriseLinux(RHEL)的一个开源操作系统,被广泛使用于服务器环境中,在CentOS上安装Gunicorn和进行分区可以提高服务器的性能和安全性,本文将详细介绍如何在CentOS上安装Gunicorn以及如何进行分区。CentOS安装GunicornGunicorn是一个Python的WSGIHTTP服务器,用于运行Python的Web应用程序,以下是在CentOS上安装Gunicorn

如何最优化Win11磁盘性能?如何最优化Win11磁盘性能?Jun 30, 2023 am 08:33 AM

win11怎么优化磁盘性能?我们都知道,磁盘性能越高,电脑进行读写的速度越快,运行系统越不卡、开机也更快。本期教程小编就带大家来了解win11系统提升磁盘性能操作方法,感兴趣的朋友们一起来看看吧。win11系统提升磁盘性能操作方法  1、首先,往电脑插入U盘,或移动硬盘,然后进入此电脑,找到对应的磁盘,点击右键,在打开的菜单项中,选择属性;  2、设备属性窗口,切换到硬件选项卡,选择U盘,或移动硬盘对应的设备,然后点击右下角的属性;  3、接着,会弹出该设备的属性窗口,切换到常规选项卡,再点击改

Windows 11分区指南Windows 11分区指南Jan 04, 2024 am 08:28 AM

在使用win11系统的时候,分区也是一个很重要的步骤,我们可以将不同的软件装在不同的盘里这样大大的增加了安全性,要是没有进行分盘的小伙伴可以赶紧分个盘。win11分区教程:1、首先我们右键“此电脑”然后点击“管理”。2、接着打开“磁盘管理”。3、然后选择一个需要分区的磁盘。4、接着打开压缩卷。5、输入压缩空间的大小。6、然后点击下面的“压缩”。7、找到新建界面。8、点击下一页。9、然后输入新建分区的大小,点击下一页。10、接着输入磁盘的序号。11、选择一个磁盘格式化的方式。12、最后点击完成就可

vmware虚拟机磁盘扩容步骤教程vmware虚拟机磁盘扩容步骤教程Feb 19, 2024 am 11:54 AM

1.外部先进入虚拟机设置,将磁盘先扩展,具体提示如下图所示:2.磁盘扩展成功后登进虚拟机,先查看扩容前内存的基本情况。#查看分区使用情况df-h3.明确分区后,先去查看分区的信息,确定分区的情况。#查看系统分区信息fdisk-l(1)磁盘/dev/sda:53.7GB–系统含有一个系统内部识别为磁盘/dev/sda的硬盘,内存为53.7G。(2)磁盘/dev/mapper/centos-swap:2147M与磁盘/dev/mapper/centos-root:18.2GB–表示系统分区的两个物理

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function