一种供MS-DOS及其它Windows *** 作系统对文件进行组织与管理的文件系统。文件分配表(FAT)是当您使用FAT或FAT32文件系统对特定卷进行格式化时,由Windows所创建的一种数据结构。Windows将与文件相关的信息存储在FAT中,以供日后获取文件时使用。
FAT32
一种从文件分配表(FAT)文件系统派生而来的文件系统。与FAT相比,FAT32能够支持更小的簇以及更大的容量,从而能够在FAT32卷上更为高效的分配磁盘空间。
NTFS文件系统
一种能够提供各种FAT版本所不具备的性能、安全性、可靠性与先进特性的高级文件系统。举例来说,NTFS通过标准事务日志功能与恢复技术确保卷的一致性。如果系统出现故障,NTFS能够使用日志文件与检查点信息来恢复文件系统的一致性。在Windows 2000和Windows XP中,NTFS还能提供诸如文件与文件夹权限、加密、磁盘配额以及压缩之类的高级特性。
在NTFS、FAT与FAT32间进行选择
在运行Windows XP的计算机上,您可以在三种面向磁盘分区的不同文件系统--NTRS、FAT和FAT32--中加以选择。其中,NTFS是强力推荐您使用的文件系统,与FAT或FAT32相比,它具有更为强大的功能,并且包含Active Directory及其它重要安全特性所需的各项功能。只有选择NTFS作为文件系统,您才可以使用诸如Active Directory和基于域的安全性之类特性。
NTFS和FAT32的选择
Win 2000可以同时支持FAT32和NTFS两种文件系统,FAT32长于与Win 9X的兼容性,NTFS长于系统安全性。在满足应用的前提下,怎样设置文件系统才能充分发挥Win 2000的特性呢?在讨论这个问题之前,我们先来看一下FAT32和NTFS两种文件系统各有哪些特点。
FAT32文件系统
在推出FAT32文件系统之前,通常PC机使用的文件系统是FAT16。像基于MS-DOS,Win 95等系统都采用了FAT16文件系统。在Win 9X下,FAT16支持的分区最大为2GB。我们知道计算机将信息保存在硬盘上称为“簇”的区域内。使用的簇越小,保存信息的效率就越高。在FAT16的情况下,分区越大簇就相应的要增大,存储效率就越低,势必造成存储空间的浪费。并且随着计算机硬件和应用的不断提高,FAT16文件系统已不能很好地适应系统的要求。在这种情况下,推出了增强的文件系统FAT32。同FAT16相比,FAT32主要具有以下特点:
1. 同FAT16相比FAT32最大的优点是可以支持的磁盘大小达到2TB(2047GB),但是不能支持小于512MB的分区。基于FAT32的Win 2000可以支持分区最大为32GB;而基于 FAT16的Win 2000支持的分区最大为4GB。
2. 由于采用了更小的簇,FAT32文件系统可以更有效率地保存信息。如两个分区大小都为2GB,一个分区采用了FAT16文件系统,另一个分区采用了FAT32文件系统。采用FAT16的分区的簇大小为32KB,而FAT32分区的簇只有4KB的大小。这样FAT32就比FAT16的存储效率要高很多,通常情况下可以提高15%。
3. FAT32文件系统可以重新定位根目录和使用FAT的备份副本。另外FAT32分区的启动记录被包含在一个含有关键数据的结构中,减少了计算机系统崩溃的可能性。
NTFS文件系统
NTFS文件系统是一个基于安全性的文件系统,是Windows NT所采用的独特的文件系统结构,它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的文件系统。使用非常广泛的Windows NT 4.0采用的就是NTFS 4.0文件系统,相信它所带来的强大的系统安全性一定给广大用户留下了深刻的印象。Win 2000采用了更新版本的NTFS文件系统——NTFS 5.0,它的推出使得用户不但可以像Win 9X那样方便快捷地 *** 作和管理计算机,同时也可享受到NTFS所带来的系统安全性。
NTFS 5.0的特点主要体现在以下几个方面:
1. NTFS可以支持的分区(如果采用动态磁盘则称为卷)大小可以达到2TB。而Win 2000中的FAT32支持分区的大小最大为32GB。
2. NTFS是一个可恢复的文件系统。在NTFS分区上用户很少需要运行磁盘修复程序。NTFS通过使用标准的事物处理日志和恢复技术来保证分区的一致性。发生系统失败事件时,NTFS使用日志文件和检查点信息自动恢复文件系统的一致性。
3. NTFS支持对分区、文件夹和文件的压缩。任何基于Windows的应用程序对NTFS分区上的压缩文件进行读写时不需要事先由其他程序进行解压缩,当对文件进行读取时,文件将自动进行解压缩;文件关闭或保存时会自动对文件进行压缩。
4. NTFS采用了更小的簇,可以更有效率地管理磁盘空间。在Win 2000的FAT32文件系统的情况下,分区大小在2GB~8GB时簇的大小为4KB;分区大小在8GB~16GB时簇的大小为8KB;分区大小在16GB~32GB时,簇的大小则达到了16KB。而Win 2000的NTFS文件系统,当分区的大小在2GB以下时,簇的大小都比相应的FAT32簇小当分区的大小在2GB以上时(2GB~2TB),簇的大小都为4KB。相比之下,NTFS可以比FAT32更有效地管理磁盘空间,最大限度地避免了磁盘空间的浪费。
5. 在NTFS分区上,可以为共享资源、文件夹以及文件设置访问许可权限。许可的设置包括两方面的内容:一是允许哪些组或用户对文件夹、文件和共享资源进行访问;二是获得访问许可的组或用户可以进行什么级别的访问。访问许可权限的设置不但适用于本地计算机的用户,同样也应用于通过网络的共享文件夹对文件进行访问的网络用户。与FAT32文件系统下对文件夹或文件进行访问相比,安全性要高得多。另外,在采用NTFS格式的Win 2000中,应用审核策略可以对文件夹、文件以及活动目录对象进行审核,审核结果记录在安全日志中,通过安全日志就可以查看哪些组或用户对文件夹、文件或活动目录对象进行了什么级别的 *** 作,从而发现系统可能面临的非法访问,通过采取相应的措施,将这种安全隐患减到最低。这些在FAT32文件系统下,是不能实现的。
6. 在Win 2000的NTFS文件系统下可以进行磁盘配额管理。磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。设置磁盘配额后,可以对每一个用户的磁盘使用情况进行跟踪和控制,通过监测可以标识出超过配额报警阈值和配额限制的用户,从而采取相应的措施。磁盘配额管理功能的提供,使得管理员可以方便合理地为用户分配存储资源,避免由于磁盘空间使用的失控可能造成的系统崩溃,提高了系统的安全性。
7. NTFS使用一个“变更”日志来跟踪记录文件所发生的变更。
小提示(选取FAT32和NTFS的建议)
在系统的安全性方面,NTFS文件系统具有很多FAT32文件系统所不具备的特点,而且基于NTFS的Win 2000运行要快于基于FAT32的Win 2000;而在与Win 9X的兼容性方面,FAT32优于NTFS。所以在决定Win 2000中采用什么样的文件系统时应从以下几点出发:
1. 计算机是单一的Win 2000系统,还是采用多启动的Win 2000系统;
2. 本地安装的磁盘的个数和容量;
3. 是否有安全性方面的考虑等。
基于以上的考虑,如果要在Win 2000中使用大于32GB的分区的话,那么只能选择NTFS格式。如果计算机作为单机使用,不需要考虑安全性方面的问题,更多地注重与Win 9X的兼容性,那么FAT32是最好的选择。如果计算机作为网络工作站或更多的追求系统的安全性,而且可以在单一的Win 2000模式下运行,强烈建议所有的分区都采用NTFS格式;如果要兼容以前的应用,需要安装Win 9X或其它的 *** 作系统,建议做成多启动系统,这就需要两个以上的分区,一个分区采用NTFS格式,另外的分区采用FAT32格式,同时为了获得最快的运行速度建议将Win 2000的系统文件放置在NTFS分区上,其它的个人文件则放置在FAT32分区中
NTFS适合你吗?
在多 *** 作系统中是否选择将FAT32转换为NTFS,应该根据自己的情况来决定。如果重在性能和安全方面,那么可以将FAT32转换为NTFS;如果重在可 *** 作性和兼容性方面,应该保持FAT32,不进行转换,因为支持FAT32的 *** 作系统更多。而NTFS对Windows Me和以前的Windows版本并不兼容。建议除Windows XP/2003外的系统用FAT32。
将FAT32转换为NTFS
在Windows 2000/XP中,可以在命令提示符状态下键入“convert E:/FS NTFS”(假设E盘原来使用的是FAT32),回车后,在下次重启时自动将E盘转换为NTFS文件系统。转换时最好整理一下磁盘碎片加快转换速度,并且把数据备份到其他不转换的分区中。
将NTFS转换为FAT32
将NTFS转换成FAT32相对比较复杂,在不需要旧的文件情况下,我们可以使用Windows 2000/XP的安装光盘来完成转换,在安装时,选择“用FAT文件系统格式化磁盘分区”。如果你需要保存原来的文件,可以用Partition Magic For DOS来转换,不过这种转换的速度比较慢,数据也容易丢失,因此强烈建议转换前备份好数据。
转换问题多
如果当前的磁盘分区已经采用了NTFS文件系统,而且已经保存了许多资料,包括加密的文件或文件夹,这时转换为FAT32就会出现加密文件无法访问的问题,而且因为两种文件系统采用的文件命名方式不同,在转换后文件名会出现问题
该不该选用NTFS文件系统?
Windwos 9X 普及的时候已有Windows NT系统,由于Windows NT系统多用于商业平台,一般家用机都是安装Windows 9X , 在Windows 2000 推出的时候,因为其庞大的体积与众多用应用程序还有与Windows 9X 全然不同的一些 *** 作方式,所以普通用户都没有接触过Windows 2000 , 当然也就没有用过NTFS文件系统。当然NT 3.X 与 NT 4.X系统是很早就出来的,但也是很少有人问津,因为它跟本不适合家用,这里也不多说了。 XP的推出让人耳目一新,越来越多的人安装了XP,但也就引发了他们必需面对的一个问题,那就是这个贴子的标题《该不该选用NTFS文件系统?》。
在运行Windows 2000/XP的计算机上,NTFS是系统推荐使用的文件系统,NTFS是最容易处理大容量硬盘的文件系统,NTFS文件系统能够提供目录的各种新功能和其他比较重要的安全功能。使用NTFS文件系统对分区进行格式化时分区中的碎片会更少,性能也会更高。
有一点要注意的是,早先的Windows 9.x 系统是无法直接访问NTFS分区的,听说有补丁,但也不是万能的。所以,如果你还不愿意放弃windows 9.X系统的话,这个文章可能对你没有什么用处。
NTFS分区方式的优点。
自从Windows2000开始,微软开始推荐大家使用NTFS的磁盘格式,其后推出的XP更是要配合这种磁盘格式才能发挥其最大的性能优势。不仅仅是微软推广的缘故,NTFS的磁盘格式由于其自身的技术优势,配合目前硬件、网络发展的趋势的作用,正逐渐被广大用户接受。
1、大硬盘带来的影响。
现在的硬盘容量正以倍数在增长,每半年就增加一倍甚至更多,价格却在降低。这样基于传统的FAT文件系统的分区方式,就将逐步体现出其先天不足之处了——我们先来看看FAT32,FAT32是FAT文件系统的增强版本,可用在容量为512MB到2TB的驱动器上,虽然如此,以FAT32的格式,如果划分太大的分区空间,由于其磁盘的簇相对过大,在储存多个小文件的时候,将造成空间利用上的极大浪费。
相对而言,NTFS的磁盘格式的簇相当地细,就能有效地利用磁盘空间,而且不容易产生碎片。另外,NTFS的磁盘格式在处理单个巨大的文件的时候如进行视频捕捉、编辑的时候,也比FAT系统有优势。随着海量硬盘的发展,使用NTFS的分区格式将越来越必要——你总不希望把分区数划分满24个字母的盘符来迁就分区容量吧?所以,微软推荐使用NTFS而不是FAT32文件系统格式化大于32GB的分区是有其道理的。
2、新一代Windows *** 作系统的影响
随着时间的推移,新一代Windows的过渡,微软很可能会采取放弃兼容DOS的安装和维护 *** 作系统的方式,即光盘启动后直接采用全新的直接图形化界面进行下几代Windows的安装,这样可以避开DOS模式的内存配置环境对安装Windows造成的负面影响,也可让很多破解其激活设置的程序失效(DOS环境下内存配置对新手来说比较复杂,很多人安装XP失败除了硬件兼容问题外,是由于这个原因);同时对最终用户来说,新的安装模式可在安装的时候更好地分析用户的硬件系统,提供更多的友好提示和更强的故障解决功能。使用图形界面直接管理安装任务的话,基于第一点叙述的原因,Windows很可能会要求用户用NTFS先格式化新一代海量硬盘超过32G的分区,才能继续进行安装。也可能通过在新的 *** 作系统里去掉对FAT系统的支持,来强行推广NTFS磁盘格式。
3、联网和多PC连接导致的用户安全和管理问题
以后的电脑进行在线工作和娱乐是不可逆转的趋势,随着互联网在世界各地进一步普及,在线的电脑的安全和管理问题日益突出,而且很多人家里由于升级,已经有超过了一台的电脑。只有使用NTFS,Windows系统的安全性能和可管理性才能真正得到保障。无论是接入INTERNET还是用户自己在家里组建局域网,NTFS都将使用户更灵活地配置和管理计算机资源。NTFS的磁盘配额、用户权限和个人文件加密等等功能、和网络应用方面的优势,已经有很多资料介绍了,此处不再重复。
另外,NTFS支持基于UNIX服务的POSIX标准,可移植性也很强。这保证了它和其他网络平台的兼容性。
当然,这一切的前提是Windows还是占垄断地位的 *** 作系统。从目前情况看,微软保持其软件业龙头的地位还是不成问题的。超过500G的海量硬盘在明年年底或是后年初就可能会出现了,这是推动NTFS磁盘格式成为主流分区格式的最强大动力之一。
由以上的几点可看出,针对家用PC而言,使用NTFS的最大的好处是第一点,也就是NTFS对大硬盘有着更好的支持与利用,第三点主要是针对商业型用户,这里我也想对那些入门级用户说一声,如果你使用了NTFS且对NTFS的磁盘配额、用户权限和个人文件加密等等功能不是很了解,最好不要随意设置目录的权限,不然可能会有着意想不到的后果。
细数NTFS的四大优点
1.具备错误预警的文件系统
在NTFS分区中,最开始的16个扇区是分区引导扇区,其中保存着分区引导代码,接着就是主文件表(Master File Table,以下简称MFT),但如果它所在的磁盘扇区恰好出现损坏,NTFS文件系统会比较智能地将MFT换到硬盘的其他扇区,保证了文件系统的正 常使用,也就是保证了Windows的正常运行。而以前的FAT16和FAT32的FAT(文件分配表)则只能固定在分区引导扇区的后面,一旦遇到扇区损 坏,那么整个文件系统就要瘫痪。
但这种智能移动MFT的做法当然并非十全十美,如果分区引导代码中指向MFT的部分出现错误,那么NTFS文件系统便会不知道到哪里寻找MFT ,从而会报告“磁盘没有格式化”这样的错误信息。为了避免这样的问题发生,分区引导代码中会包含一段校验程序,专门负责侦错。
2.文件读取速度更高效!
恐怕很多人都听说NTFS文件系统在安全性方面有很多新功能,但你可否知道:NTFS在文件处理速度上也比FAT32大有提升呢?
对DOS略知一二的读者一定熟悉文件的各种属性:只读、隐藏、系统等。在NTFS文件系统中,这些属性都还存在,但有了很大不同。在这里 ,一切东西都是一种属性,就连文件内容也是一种属性。这些属性的列表不是固定的,可以随时增加,这也就是为什么你会在NTFS分区上看到 文件有更多的属性。
NTFS文件系统中的文件属性可以分成两种:常驻属性和非常驻属性,常驻属性直接保存在MFT中,像文件名和相关时间信息(例如创建时间 、修改时间等)永远属于常驻属性,非常驻属性则保存在MFT之外,但会使用一种复杂的索引方式来进行指示。如果文件或文件夹小于1500字节 (其实我们的电脑中有相当多这样大小的文件或文件夹),那么它们的所有属性,包括内容都会常驻在MFT中,而MFT是Windows一启动就会载入 到内存中的,这样当你查看这些文件或文件夹时,其实它们的内容早已在缓存中了,自然大大提高了文件和文件夹的访问速度。
小提示
为什么FAT的效率不如NTFS高
FAT文件系统的文件分配表只能列出了每个文件的名称及起始簇,并没有说明这个文件是否存在,而需要通过其所在文件夹的记录来判断, 而文件夹入口又包含在文件分配表的索引中。因此在访问文件时,首先要读取文件分配表来确定文件已经存在,然后再次读取文件分配表找到 文件的首簇,接着通过链式的检索找到文件所有的存放簇,最终确定后才可以访问。
3.磁盘自我修复功能
NTFS利用一种“自我疗伤”的系统,可以对硬盘上的逻辑错误和物理错误进行自动侦测和修复。在FAT16和FAT32时代,我们需要借助 Scandisk这个程序来标记磁盘上的坏扇区,但当发现错误时,数据往往已经被写在了坏的扇区上了,损失已经造成。
NTFS文件系统则不然,每次读写时,它都会检查扇区正确与否。当读取时发现错误,NTFS会报告这个错误;当向磁盘写文件时发现错误, NTFS将会十分智能地换一个完好位置存储数据, *** 作不会受到任何影响。在这两种情况下,NTFS都会在坏扇区上作标记,以防今后被使用。这 种工作模式可以使磁盘错误可以较早地被发现,避免灾难性的事故发生。
有些人发现当把磁盘转换为NTFS文件系统后,用磁盘扫描程序就很难发现磁盘错误了。经过前面的介绍,你知道这是为什么了吗?
4.“防灾赈灾”的事件日志功能
在NTFS文件系统中,任何 *** 作都可以被看成是一个“事件”。比如将一个文件从C盘复制到D盘,整个复制过程就是一个事件。事件日志一直 监督着整个 *** 作,当它在目标地——D盘发现了完整文件,就会记录下一个“已完成”的标记。假如复制中途断电,事件日志中就不会记录“已 完成”,NTFS可以在来电后重新完成刚才的事件。事件日志的作用不在于它能挽回损失,而在于它监督所有事件,从而让系统永远知道完成了 哪些任务,那些任务还没有完成,保证系统不会因为断电等突发事件发生紊乱,最大程度降低了破坏性。
5.我是否需要哪些附加的功能?
其实,NTFS还提供了磁盘压缩、数据加密、磁盘配额(在“我的电脑”中右击分区并并行“属性”,进入“配额”选项卡即可设置)、动态 磁盘管理等功能,这些功能在很多报刊杂志上介绍的比较多了,这里不再详细介绍。
NTFS提供了为不同用户设置不同访问控制、隐私和安全管理功能。如果你的系统处于一个单机环境,比如家用电脑,那么这些功能对你意义 不是很大。
小提示
从FAT转换过来的NTFS,性能有折扣
如果分区是从FAT32转换为NTFS文件系统的(使用命令为“CONVERT 驱动器盘符 /FS:NTFS”),不仅MFT会很容易出现磁盘碎片,更糟糕的是,磁盘碎片整理工具往往不能整理这各分区中的MFT,严重影响系统性能。因此, 建议将分区直接格式化为NTFS文件系统。
当数据表中的数据量很大时,分区带来的效率提升才会显现出来。只有检索字段为分区字段时,分区带来的效率提升才会比较明显。因此, 分区字段的选择很重要 ,并且 业务逻辑要尽可能地根据分区字段做相应调整 (尽量使用分区字段作为查询条件)。
1、分区表对业务透明,只需要维护一个表的数据结构。
2、DML *** 作加锁仅影响 *** 作的分区,不会影响未访问分区。
3、通过分区交换快速将数据换入和换出分区表。
4、通过TRUNCATE *** 作快速清理特定分区数据。
5、通过强制分区仅访问特定分区数据,减少 *** 作影响。
6、通过大数据量分区能有效降低索引层数,提高查询性能。
1、创建表时指定分区
物理文件:
2、插入数据
3、查询 information_schema.partitions 表得到该表的分区信息
4、查询计划分析
5、添加分区
若报错:
6、修改/覆盖/合并分区
报错
所以需要添加pmax 分区,一同修改
7、删除分区
8、查询具体分区的下数据
MySQL分区的限制
分区介绍:
一、什么是分区?
所谓分区,就是将一个表分成多个区块进行 *** 作和保存,从而降低每次 *** 作的数据,提高性能。而对于应用来说则是透明的,从逻辑上看只有一张表,但在物理上这个表可能是由多个物理分区组成的,每个分区都是独立的对象,可以进行独立处理。
二、分区作用
1.可以逻辑数据分割,分割数据能够有多个不同的物理文件路径。
2.可以存储更多的数据,突破系统单个文件最大限制。
3.提升性能,提高每个分区的读写速度,提高分区范围查询的速度。
4.可以通过删除相关分区来快速删除数据
5.通过跨多个磁盘来分散数据查询,从而提高磁盘I/O的性能。
6.涉及到例如SUM()、COUNT()这样聚合函数的查询,可以很容易的进行并行处理。
7.可以备份和恢复独立的分区,这对大数据量很有好处。
三、分区能支持的引擎
MySQL支持大部分引擎创建分区,入MyISAM、InnoDB等;不支持MERGE和CSV等来创建分区。同一个分区表中的所有分区必须是同一个存储引擎。值得注意的是,在MySQL8版本中,MyISAM表引擎不支持分区。
四、确认MySQL支持分区
从MySQL5.1开始引入分区功能,可以如下方式查看是否支持:
老版本用:SHOW VARIABLES LIKE '%partition%'
新版本用:show plugins
五、分区类型
1. RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。
例如,可以将一个表通过年份划分成两个分区,2001 -2010年、2011-2020。
2. LIST分区:类似于RANGE分区,LIST是列值匹配一个离散值集合中的某个值来进行选择。
比如 根据字段 把值为1、3、5的放到一起,2、4、6的另外放到一起 等等...
3. HASH分区:基于用户定义的表达式的返回值来进行选择分区,该表达式使用将要插入到表中的这些行的列值来进行计算,这个函数必须产生非负整数值。
通过HASH运算来进行分区,分布的比较均匀
4. KEY分区:类似于按HASH分区,由MySQL服务器提供其自身的哈希函数。
按照KEY进行分区类似于按照HASH分区
六、使用分区注意事项
1. 如果表中存在primary key 或者 unique key 时,分区的列必须是paimary key或者unique key的一个组成部分,也就是说,分区函数的列只能从pk或者uk这些key中取子集
2. 如果表中不存在任何的paimary key或者unique key,则可以指定任何一个列作为分区列
3. 5.5版本前的RANGE、LIST、HASH分区要求分区键必须是int;MySQL5.5及以上,支持非整形的RANGE和LIST分区,即:range columns 和 list columns (可以用字符串来进行分区)。
七、分区命名
1. 分区的名字基本上遵循其他MySQL 标识符应当遵循的原则,例如用于表和数据库名字的标识符。应当注意的是,分区的名字是不区分大小写的。
2. 无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从0开始记录。
八、 创建分区
1. RANGE分区:
解读:以上为 uuid小于5时放到p0分区下,uuid大于5且小于10放到p1分区下,uuid大于10且小于15放到p2分区下,uuid大于15 一直到最大值的存在p3分区下
2. LIST分区:
解读:以上为uuid 等于1/2/3/5时放到p0分区,7/9/10放到p1分区,11/15放到p2分区。当时用insert into时 如果uuid的值不存在p0/p1/p2分区时,则会插入失败而报错。
3. HASH分区:
HASH分区主要用来确保数据在预先确定数目的分区中平均分布。在RANGE分区和LIST分区中必须明确指定一个指定的列值或列值集合以指定应该保存在哪个分区中。而在HASH分区中,MySQL会自动完成这些工作,要做的只是基于将要被哈希的列值指定一个表达式,以及指定被分区的表将要被分割成的分区数量,如:
解读:MySQL自动创建3个分区,在执行insert into时,根据插入的uuid通过算法来自动分配区间。
注意:
(1) 由于每次插入、更新、删除一行,这个表达式都要计算一次,这意味着非常复杂的表达式可能会引起性能问题,尤其是在执行同时影响大量行的运算(例如批量插入)的时候。
(2) 最有效率的哈希函数是只对单个表列进行计算,并且它的值随列值进行一致的增大或减小,因为这考虑了在分区范围上的“修剪”。也就是说,表达式值和它所基于的列的值变化越接近,就越能有效地使用该表达式来进行HASH分区。
3.1:线性HASH分区
线性HASH分区在“PARTITION BY”子句中添加“LINEAR”关键字。
线性HASH分区的有点在于增加、删除、合并和拆分分区将变得更加快捷,有利于处理含有及其大量数据的表。它的缺点在于各个分区间数据的分布不大可能均衡。
4. KEY分区
类似于HASH分区,HASH分区允许用户自定义的表达式,而KEY分区则不允许使用用户自定义的表达式;HASH分区只支持整数分区,KEY分区支持除了blob和text类型之外的其他数据类型分区。
与HASH分区不同,创建KEY分区表的时候,可以不指定分区键,默认会选择使用主键或唯一键作为分区键,没有主键或唯一键,就必须指定分区键。
解读:根据分区键来进行分区
5. 子分区
子分区是分区表中,每个分区的再次分割,适合保存非常大量的数据。
解读:主分区使用RANGE按照年来进行分区,有3个RANGE分区。这3个分区中又被进一步分成了2个子分区,实际上,整个表被分成了3 * 2 = 6个分区。每个子分区按照天进行HASH分区。小于2017的放在一起,2017-2020的放在一起,大于2020的放在一起。
注意:
(1) 在MySQL5.1中,对于已经通过RANGE或LIST分区了的表在进行子分区是可能的。子分区既可以使用HASH分区,也可以使用KEY分区。这也被称为复合分区。
(2) 每个分区必须有相同数量的子分区。
(3) 如果在一个分区表上的任何分区上使用SUBPARTITION来明确定义任何子分区,那么就必须定义所有的子分区。
(4) 每个SUBPARTITION子句必须包含(至少)子分区的一个名字。
(5) 在每个子分区内,子分区的名字必须是惟一的,目前在整个表中,也要保持唯一。例如:
子分区可以用于特别大的表,可以在多个磁盘间分配数据和索引。例如:
九、MySQL分区处理NULL值的方式
十、分区管理概述
可以对分区进行添加、删除、重新定义、合并或拆分等管理 *** 作。
① RANGE和LIST分区的管理
1. 删除分区语句如:alter table tbl_test drop partition p0
注意:
(1) 当删除了一个分区,也同时删除了该分区中所有的数据。
(2) 可以通过show create table tbl_test来查看新的创建表的语句。
(3) 如果是LIST分区的话,删除的数据不能新增进来,因为这些行的列值包含在已经删除了的分区的值列表中。
2. 添加分区语句如:alter table tbl_test add partition(partition p3 values less than(50))
注意:
(1) 对于RANGE分区的表,只可以添加新的分区到分区列表的最高端。
(2) 对于LIST分区的表,不能添加已经包含在现有分区值列表中的任意值。
3. 如果希望能不丢失数据的条件下重新定义分区,可以使用如下语句:
REORGANIZE会对分区的数据进行重构。
ALTER TABLE tbl_name REORGANIZE PARTITION partition_list INTO(partition_definitions)
(1) 拆分分区如:
ALTER TABLE tbl_name REORGANIZE PARTITION partition_list INTO(partition s0 values less than(5),partition s1 values less than(10))
或者如:
ALTER TABLE tbl_name REORGANIZE PARTITION p0 INTO(partition s0 values in(1,2,3), partition s1 values in(4,5))
(2) 合并分区如:ALTER TABLE tbl_name REORGANIZE PARTITION s0,s1 INTO(partition p0 values in(1,2,3,4,5))
4. 删除所有分区,但保留数据,形式:ALTER TABLE tbl_name remove partitioning
② HASH和KEY分区的管理
1. 减少分区数量语句如:ALTER TABLE tbl_name COALESCE PARTITION 2
2. 添加分区数量语句如:ALTER TABLE tbl_name add PARTITION partitions 2
③ 其他分区管理语句
1. 重建分区:类似于先删除保存在分区中的所有记录,然后重新插入它们,可用于整理分区碎片。如:ALTER table tbl_name REBUILD PARTITION p2,p3
2. 优化分区:如果从分区中删除了大量的行,或者对一个带有可变长度的行(也就是说,有VARCHAR,BLOB或TEXT类型的列)做了许多修改,可以使用 ALTER TABLE tbl_name OPTIMIZE PARTITION来收回没有使用的空间,并整理分区数据文件的碎片。如:ALTER TABLE tbl_name OPTIMIZE PARTITION p2,p3
3. 分析分区:读取并保存分区的键分布,如:ALTER TABLE tbl_name ANALYZE PARTITION p2,p3
4. 检查分区:检查分区中的数据或索引是否已经被破坏,如:ALTER TABLE tbl_name CHECK PARTITION p2,p3
5. 修补分区:修补被破坏的分区,如:ALTER TABLE tbl_name REPAIR PARTITION p2,p3
十、查看分区信息
1. 查看分区信息:select * from information_schema.partitions where table_schema='arch1' and table_name = 'tbl_test' G
2. 查看分区上的数据:select * from tbl_test partition(p0)
3. 查看MySQL会 *** 作的分区:explain partitions select * from tbl_test where uuid = 2
十一、 局限性
1. 最大分区数目不能超过1024,一般建议对单表的分区数不要超过50个。
2. 如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内。
3. 不支持外键。
4. 不支持全文索引,对分区表的分区键创建索引,那么这个索引也将被分区。
5. 按日期进行分区很合适,因为很多日期函数可以用。但是对字符串来说合适的分区函数不太多。
6. 只有RANGE和LIST分区能进行子分区,HASH和KEY分区不能进行子分区。
7. 临时表不能被分区。
8. 分区表对于单条记录的查询没有优势。
9. 要注意选择分区的成本,没插入一行数据都需要按照表达式筛选插入的分区。
10. 分区字段尽量不要可以为null
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)