MYSQL网页编程之MySQL数据库分区办理 细节决意成败
不管怎么样,市场的结果已经证明MySQL具有性价比高、灵活、MySQL学习教程广为使用和具有良好支持的特点。<p>在MySQL数据库中,表的分歧部分在分歧的地位被存储为独自的表。分区次要就是用来办理表在分歧的地位存储的成绩。在其他数据库中,也会存在这类情形。他们将这类范例的数据表称之为分区表。分区的办理,关于MySQL数据库来讲相当主要。其间接跟数据库的功能与平安性互相关注。关于分区的办理,笔者只要两个字:细节。细节一:断定所利用的版本是不是撑持分区
在MySQL中,并非一切的数据库版本都撑持分区办理。为此数据库办理员起首要做的就是,确认本人所接纳的版本是不是撑持这个功效。假如撑持的话,则能够在后续计划与保护时使用分区的特征来提拔体系功能、进步数据平安。反之,则不可。要判别所利用的版本是不是撑持分区功效,能够经由过程体系命令来完成。以下图所示:
假如下面这个变量,其显现的值是YES,那末很光荣的告知你,你说是用的版本撑持分区办理。假如这个变量的值是空缺的,则暗示所利用的版本不撑持分区办理。笔者倡议对现有的数据库版本举行晋级。
关于分区办理,笔者必要夸大一点,即MySQL数据库与其他数据库在分区完成上的差别。关于MySQL数据库来讲,次要是经由过程分区函数来完成分区的把持。如这多是一个HASH函数、大概一个数值列表。固然数据库办理员其实不必要十分懂得其外部的完成机制。可是必要明白的是,接纳分歧的分区范例,就选择了分歧的分区函数。反过去说,分区函数的特性就断定了所选择分区的特征。从这个角度来说,把握函数的一些基础特性,能够匡助我们更好的了解分歧范例分区之间的差别。从而有益于数据库办理员依据企业的实践情形来计划公道的分区。
细节二:存储引擎与分区之间的干系
存储引擎次要用来完成对数据库数据的存储。明显这个存储引擎与分区之间有着严密的接洽。这个接洽次要表现在以下这个方面。
一般情形下,关于创立了分区的数据表,数据库办理员可使用数据库服务器所撑持的任何存储引擎。也就是说,关于数据引擎来讲,分区是通明的。这次要是由于在MySQL数据库中,分区引擎是在一个独自的层中运转的。而且能够和任何如许的层举行互相相同。不外假如再深挖下往的话,这里仍旧有一个细节成绩必要思索,即必要注重一个限定的划定规矩。关于统一个分区表的一切分区都必需利用统一个存储引擎。举一个复杂的例子。如今有一个数据表,其有两个数据分区,分离为A与B。此时假如数据库办理员关于分区A接纳了MYISAM;那末关于分区B也只可以利用MYISAM,而不克不及够利用别的的,如INNODB。
这段话看起来仿佛有点相互冲突的中央。实在我们能够将其总结为一句话。即分歧的分区表,能够接纳任何数据库所撑持的数据引擎。可是关于统一个数据表的分歧分区,则只可以利用统一个存储引擎。
最初必要申明的是,从存储引擎的相干信息中,其实不可以看出其服务的数据表是不是撑持分区的功效。也就是说,不克不及够经由过程命令showengines来判别数据库是不是撑持分区。数据库办理员只可以经由过程下面的第一个命令来判别数据库分区的相干信息。
细节三:分区是一个全体,不克不及够举行支解
一个数据表能够依据实践情形分为多个分区。可是支解后的分区仍旧是一个全体。这是甚么意义呢?笔者举一个例子,列位就能够了解了。如今有一个数据表,表中有纪录和索引。在举行分区计划时,不克不及够只对数据分区而不合错误索引分区,也不克不及够对索引分区而不合错误数据分区。这就仿佛是分蛋糕一样。蛋糕会有高低两层。在分蛋糕时,是高低两层一同分。而不会只分下面一层奶油。为此必要牢记,分区时是对数据表中的一切内容举行同时分区,而不克不及够对部分举行分区。
别的必要注重的是,假如要对某个表举行分区,那末就必要对全部表举行分区办理。而不克不及够对部分举行分区。如对某个表的上半部分不实行分区,而只对下半部分举行分区办理,这是不同意的。
细节四:分区怎样进步查询效力
接纳分区办理,能够很好的进步查询的效力。笔者这里举一个批发企业的案例。如如今有一家超市,利用的是MySQL数据库。一家超市,每一年的发卖纪录会有几万万条。几年积累上去,数据量十分的年夜。如今假如用户必要查询,客岁一年某个产物的发卖情形,那就像易如反掌一样,速率会十分的慢。
此时假如接纳分区办理的话,会分明的进步查询的效力。在数据库计划的时分,能够依据工夫来分别分区。如为每年的数据独自设置一个分区。此时再查询2010年某个产物的发卖情形时,因为指定了Where前提语句,则体系只会从2010年这个数据分区中往查找相干的内容,而会疏忽其他有关的分区,从而改良数据查询效力。
在实践事情中,笔者还常常将某个表分为多个分区,然后将分歧的分区安排在分歧的磁盘上。此时能够经由过程多个硬盘来分离数据查询,来取得更年夜的查询吞吐量。假如企业数据库服务器中,已利用了磁盘阵列5的话,接纳这个措施就是画蛇添足。假如服务器中只要一块硬盘、大概固然有多快硬盘可是没有完成磁盘阵列的话,笔者将多个分区寄存在多快硬盘上的做法,仍是蛮值得保举的。如仍是以批发企业为例。假如企业一年的发卖纪录有上亿条。此时要对这上亿条的数据举行统计剖析,关于硬盘的吞吐量是一个极年夜的磨练。此时我们能够对这个数据表举行分区。如能够依据季度将其分为四个区A、B、C、D。然后将AC两个分区放在硬盘甲上,将残剩的BD两个分区放在硬盘乙上。此时体系在读取全年的数据时,会同时从两块硬盘上读取数据。这么计划的话,硬盘的吞吐量就能够进步一倍(假定不思索办理开支)。经由过程这类体例,也能够进步查询的效力。其与磁盘阵列5有殊途同归之妙。只是实在现的级别分歧。
可见接纳分区以后,一些查询可以失掉很年夜的优化。这次要是由于用户能够借助于满意一个给定的Where语句的数据能够只保留在某个特定的分区内(如2010年的买卖数据)。云云在查询时就不必再查找其他残剩的分区。固然说分区能够在创立了分区表以后再举行修正。即便刚入手下手没有思索到这个内容,也能够在今后有必要的时分从头构造数据,对数据表举行分区。可是笔者其实不同意这么做。由于对数据举行从头构造,就仿佛是从头剪贴、复制了一遍数据。在纪录对照多时,这个功课会大批的损耗服务器的资本。为此笔者仍是倡议,在数据库计划时,办理员就必要对将来的数据量可以举行展望。假如有需要接纳分区办理的,那末要延迟做。
固然分区并非对一切的企业都合用。假如企业的数据量对照少,又大概说年夜部分是一次性利用的数据,此时接纳分区的话,不会给企业带来代价。反而会增添办理上的开支。
原文链接:http://tech.it168.com/a2011/0301/1161/000001161632.shtml
【编纂保举】
DBaaS向客户提供了许多与其他云服务相类似的优势:一个灵活的、可扩展的MySQL学习教程、按需服务的平台,它以自助服务和便捷管理为导向,可以对环境中的资源进行调配。 很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。 只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。 原来公司用过MYSQL自己也只是建个表写个SQL 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片? 同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
页:
[1]