深入了解MySQL-5.5分区功能增强 (深入了解mysql)

教程大全 2025-07-14 18:00:42 浏览

的发布带来了许多增强的功能,虽然已经报道了很多增强功能,如半同步复制,但大家却忽略了分区方面的增强,有时甚至还对其真正意义产生了误解,在这篇文章中,我们希望解释一下这些很酷的增强,特别是我们大多数人还没有完全理解的地方。向您推荐《MySQL数据库入门与精通教程》。

图 1 大家还没注意到我MySQL的分区功能也很强了哦

非整数列分区

MySQL 5.5中新增了两类分区方法,RANG和LIST分区法,同时在新的函数中增加了一个COLUMNS关键词。我们假设有这样一个表:

如果你想使用MySQL 5.1中的分区类型,那你必须将类型转换成整数,需要使用一个额外的查找表,到了MySQL 5.5中,你可以不用再进行类型转换了,如:

这样的分区语句除了更加易读外,对数据的组织和管理也非常清晰,上面的例子只对category列进行分区。

看上去非常糟糕,当然也有变通办法,但麻烦确实不少。使用YEAR或TO_DAYS定义一个分区的确让人费解,查询时不得不使用赤裸列,因为加了函数的查询不能识别分区。

在这里,通过函数定义和通过列查询之间没有冲突,因为是按列定义的,我们在定义中插入的值是保留的。

多列分区

同样还有Partition BY RANGE COLUMNS (a,b,c)等其它例子。由于我很长时间都在使用MySQL 5.1的分区,我对多列分区的含义不太了解,less THAN (10,10)是什么意思?如果下一个分区是LESS THAN (10,20)会发生什么?相反,如果是(20,30)又会如何?

所有这些问题都需要一个答案,在回答之前,他们需要更好地理解我们在做什么。

开始时可能有些混乱,当所有分区有一个不同范围的值时,实际上,它只是在表的一个列上进行了分区,但事实并非如此,在下面的例子中:

它和前面的表p1不一样,如果你在表p1中插入(10,1,1),它将会进入***个分区,相反,在表p1_single中,它将会进入第二个分区,其原因是(10,1)小于(10,10),如果你仅仅关注***个值,你还没有意识到你在比较一个元组,而不是一个单一的值。

现在我们来分析一下最难懂的地方,当你需要确定某一行应该放在哪里时会发生什么?你是如何确定类似(10,9) < (10,10)这种运算的值的?答案其实很简单,当你对它们进行排序时,使用相同的方法计算两条记录的值。

如果有三列,表达式会更长,但不会更复杂。你首先在***个项目上测试小于运算,如果有两个或更多的分区与之匹配,接着就测试第二个项目,如果不止一个候选分区,那还需要测试第三个项目。

下图所显示的内容表示将遍历三条记录插入到使用以下代码定义的分区中:

(10, MAXVALUE)

图 2 元组比较。当***个值小于分区定义的***个范围时,那么该行将属于这里了。

图 3 元组比较。当***个值等于分区定义的***个范围,我们需要比较第二个项目,如果它小于第二个范围,那么该行将属于这里了。

图 4 元组比较。当***个值和第二个值等于他们对应的范围时,如果元组不小于定义的范围,那么它就不属于这里,继续下一步。

图 5 元组比较。在下一个范围时,***个项目是等于,第二个项目是小于,因此元组更小,那么该行就属于这里了。

在这些图的帮助下,我们对插入一条记录到多列分区表的步骤有了更深的了解,这些都是理论上的,为了帮助你更好地掌握新功能,我们再来看一个更高级一点的例子,对于比较务实的读者更有意义,下面是表的定义脚本:

深入了解MySQL

和上面的例子不同,这个例子更好理解,***个分区用来存储雇佣于1990年以前的女职员,第二个分区存储股用于1990-2000年之间的女职员,第三个分区存储所有剩下的女职员。对于分区p04到p06,我们策略是一样的,只不过存储的是男职员。***一个分区是控制情况。

看完后你可能要问,我怎么知道某一行存储在那个分区中的?有两个办法,***个办法是使用与分区定义相同的条件作为查询条件进行查询。

如果表是MyISAM或ARCHIVE,你可以信任由INFORMATION_SCHEMA提供的统计信息。

如果存储引擎是InnoDB,上面的值就是一个近似值,如果你需要确切的值,那你就不能信任它们。

使用定义***个分区的条件,我们获得了一个非常优化的查询,不仅如此,部分条件也将从分区修整中受益。

它和复合索引的算法一样,如果你的条件指的是索引最左边的部分,MySQL将会使用它。与此类似,如果你的条件指的是分区定义最左边的部分,MySQL将会尽可能修整。它和复合索引一起出现,如果你只使用最右边的条件,分区修整不会工作。

如果不用分区定义的***部分,使用分区定义的第二部分,那么将会发生全表扫描,在设计分区和编写查询时要紧记这一条。

可用性增强:truncate分区

分区最吸引人的一个功能是瞬间移除大量记录的能力,DBA都喜欢将历史记录存储到按日期分区的分区表中,这样可以定期删除过时的历史数据,这种方法相当管用,假设***个分区存储的是最旧的历史记录,那么你可以直接删除***个分区,然后再在末尾建立一个新分区保存最近的历史记录,这样循环下去就可以实现历史记录的快速清除。

但当你需要移除分区中的部分数据时,事情就不是那么简单了,删除分区没有问题,但如果是清空分区,就很头痛了,要移除分区中的所有数据,但需要保留分区本身,你可以:

使用DELETE语句,但我们知道DELETE语句的性能都很差。

使用DROP PARTITION语句,紧跟着一个EORGANIZE PARTITIONS语句重新创建分区,但这样做比前一个方法的成本要高出许多。

MySQL 5.5引入了TRUNCATE PARTITION,它和DROP PARTITION语句有些类似,但它保留了分区本身,也就是说分区还可以重复利用。TRUNCATE PARTITION应该是DBA工具箱中的必备工具。

更多微调功能:TO_SECONDS

TO_SECONDS会触发分区修整,与TO_DAYS不同,它可以反过来使用,就是FROM_DAYS,对于TO_SECONDS就没有这样的反向函数了,但要自己动手DIY一个也不是难事。

有了这些新武器,我们可以有把握地创建一个小于1天的临时分区,如:

因为我们没有使用COLUMNS关键字,我们也不能使用它,因为它不支持混合列和函数,表定义中的记录值就是TO_SECONDS函数的计算结果。

总结

MySQL 5.5对分区用户绝对是个好消息,虽然没有提供直接的性能增强的方法(如果你按响应时间评估性能),但更易于使用的增强功能,以及TRUNCATE PARTITION命令都可以为DBA节省大量的时间,有时对最终用户亦如此。

这些增强的功能可能会在下一个里程碑发布时得到更新,最终版本预计会在2010年年中发布,届时所有分区用户都可以尝试一下!

原文名:

作者:Giuseppe

【编辑推荐】


房地产电话销售技巧有哪些

原发布者:安东尼life房地产电话销售技巧及话术1、??????????,????????????????????,????????????,??????,??????????????????,?????????????,???????????????,??????????????????????????????????????????:1)?????????,????????????????????????????????,??????????????????,?????????????(2)?????????,??????????????????????????????????????????,???????,?????????,??,?????,??????????????,??????????????????????????,?????????,????,??????(3)??????????????,????????????????????????????????????????????????????????????????????,???????????????????,???????????,?????????????????????????????????????????,?????????????,??????????,???????????????????????????,?????????,???????,??????.??客户资源??????????,?????????????,??????????????????,???????????????,??????????????????????????,?????????,???????????????????????,??????????,???????????????????????:1???????????;2??????????????????;3?????????,???????四???????????????1????????????????????????????????????????????;2????????????(???????????)3????????,????????????;4????????-----???????,??????????,????????????????,??????????????,?????????A?????????????,????,??????????????;???????????,?????????,??????,?????,??????A????;5????????????????,??,????????,????????,?????????????????,???????????????

如何提高保持团队的工作激情?

团队建设:1、目标要集中2、关键要和谐互动3、工作方法要保持一致团队建设的技能:1、建立共同的愿景与目标的能力2、调和与应用成员差异的能力3、制定共同规范,整合新进人员具体思路:1、深度会谈2、探寻与辩护3、调查问卷

知道家庭节水的主要方法有哪些?

蔬菜先用淘米水洗一遍,再用清水清洗,不仅节约水,而且能有效清除蔬菜上的残存农药;家庭浇花,宜用淘米水、茶水、洗衣水等;将卫生间里水箱的浮球向下调整2厘米,每次冲洗可节水近3升,按家庭每天使用4次算,一年可节约水4380升;水龙头使用时间长有漏水现象,用装青霉素的小药瓶的橡胶盖剪一个与原来一样的垫圈放进去,可以保证滴水不漏。 如果坐便器的水箱过大,可换装两挡式水箱配件;坐便器的水箱漏水时,进水阀失效,水会从溢流口源源不断地流走。 排水阀失效,会造成坐便器长流水,且进水管不停地向水箱供水;使用家庭中较干净的弃水冲刷厕所,做到一水多用;垃圾不论大小、粗细,都应从垃圾通道清除,而不要通过坐便器用水冲掉。 解决马桶漏水小窍门:水箱漏水的主要原因是把手连接皮碗用的铜丝经常卡住,使皮碗掉不下去,皮碗下不去就不能完全堵死下水管,而导致漏水。 可用塑料带搓成塑料细绳,把塑料绳穿过皮碗上的铁环,连在把手摇臂上即可。 塑料绳既结实又不怕水泡,半年换一次。 水箱漏水的用户不妨一试。 洗脸水用后可以洗脚,然后冲厕所;家中应预备一个收集废水的大桶,它完全可以保证冲厕所需要的水量;淘米水、煮过面条的水,用来洗碗筷,去油又节水;养鱼的水浇花,能促进花木生长。 废水利用虽然说起来容易做起来麻烦,但节水效果明显。 据测算,将洗衣、洗澡、洗漱等生活废水收集起来,用做冲厕、拖地等,一个三口之家每月可节水1吨左右。 洗脸水用后可以洗脚,然后冲厕所;家中应预备一个收集废水的大桶,它完全可以保证冲厕所需要的水量;淘米水、煮过面条的水,用来洗碗筷,去油又节水;养鱼的水浇花,能促进花木生长。 废水利用虽然说起来容易做起来麻烦,但节水效果明显。 据测算,将洗衣、洗澡、洗漱等生活废水收集起来,用做冲厕、拖地等,一个三口之家每月可节水1吨左右.水资源日益紧缺,水费持续上涨,这让大家不得不在节水上多花点心思了。 除了使用新型的节水龙头等产品外,还有一些节水的小窍门也需要掌握。 如此一来,咱们不仅可以省下一笔生活开销,同时也响应了国家号召,可谓是一举两得。 当然,节水用具和方法其实都是次要的,关键还是意识,如果您真正有了节水意识,自然就能“开源节流”,并做到一人带动全家。 【习惯篇】节水最重要的是改变个人用水习惯,一个好习惯就能为你省下许多水。 比如,许多人在用水未中断时,就开门迎客、接电话,往往忘记关掉水龙头;在洗手、洗脸、刷牙时,更喜欢让水哗哗地流着,殊不知这些习惯会浪费大量的水。 据分析,一个家庭只要注意改掉不良习惯,养成良好的节水意识就能节水70%左右。 定期检查抽水马桶、水池、水龙头或其他水管接头以及墙壁或地下管路是否有漏水的现象,久而久之这也是一个很重要的习惯。 因为家里漏水是常有的事,也是浪费的大头。 一个水龙头一晚上能滴掉五六升水,因而发现有漏水必须马上报修或索性换个新的节水产品。 其实类似的好习惯还有很多,如在水龙头下放一个容器;不用抽水马桶冲烟头和碎细废物;别为了接一杯凉水而白白放掉许多水……【方法篇】节水的方法有很多,以下列举一些具有可行性和普遍性的方法供大家参考。 洗衣,水可反复使用节水效率:★★★★洗衣是家庭用水“大户”。 为了节水,衣服尽量不要一件一件地分开洗,小件、小量衣物提倡手洗,可节约大量水。 若嫌一件件手洗麻烦,可以多积一点脏衣服一起扔进洗衣机。 因为,洗衣机洗少量衣服时,水位定得太高,衣服在里面漂来漂去,互相之间缺少摩擦,反而洗不干净,还浪费水。 另外,如果将漂洗的水留下来作为下一批衣服的洗涤用水,一次可以省下30-40升清水。 洗澡,不要让水白流节水效率:★★★★首先,洗澡应提倡淋浴,淋浴比盆浴更为省水一些。 如果十分喜欢盆浴,可以使用节水浴缸,因为它不仅容积小还使用的是循环水。 选用淋浴时不要让水自始至终地开着,应该选择低流量莲蓬头,并要学会调节冷热水比例。 其次,尽可能先从头到脚淋湿,然后就全身涂肥皂搓洗,最后一次冲洗干净。 如一定要在澡盆、浴缸里洗澡,要注意水不要放满,有1/3-1/4就足够用了。 家中多人需要淋浴,可一个接一个排队洗澡,能节省热水流出前的冷水流失量。 马桶,减少冲水量节水效率:★★★如果觉得厕所的水箱过大,可以在水箱里竖放一块砖头或一只装满水的大可乐瓶,以减少每一次的冲水量。 也可将水箱内溢流管上的扇形支撑架降至离球阀20毫米处,即球阀只允许上升到20毫米或在橡皮球阀上开几个小洞,可控制水箱的出水。 一水多用,环保节水法节水效率:★★★一水多用法说白了就是不要让还可利用的水白白流走,让它们得到充分利用。 就如前面提到的,把漂洗衣物的水用于下一次洗衣或冲洗马桶等;还可以用淘米水、煮面水洗碗筷,去油又节水;用洗菜水、洗衣水、洗碗水及洗澡水等清洗用水来浇花、洗车;养鱼的水用来浇花(还能促进花木生长);洗脸水用后可以洗脚,然后冲厕所等。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐