|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对于现有业务,可以轻松移植到MySQL。当你需要替换掉老的硬件,当你需要削减历史遗留下的老系统的时候,选用MySQL对于财务部门来说更具吸引力。
4.3列范例选择与查询效力
要选择有助于使查询实行更快的列,应遵守以下划定规矩(这里,“BLOB范例”应当了解为即包括BLOB也包括TEXT范例):
■利用定长列,不利用可变长列。这条原则对被常常修正,从而简单发生碎片的表来讲出格主要。比方,应当选择CHAR列而不选择VARCHAR列。所要衡量的是利用定长列时,表所占用的空间更多,但假如可以承当这类占涞暮姆眩褂枚ǔば薪仁褂每杀涑さ男写砜斓枚唷?br>■在较短的列可以满意请求时不要利用较长的列。假如正利用的是定长的CHAR列,应当使它们只管短。假如列中所存储的最长值为40个字符,那末就不要将其界说为CHAR(255);只需界说为CHAR(40)便可。假如可以利用MEDIUMINT而不是BIGINT,表将会更小(磁盘I/O也较少),其值在盘算中也能够处置得更快。
■将列界说为NOTNULL。如许处置更快,所需空间更少。并且偶然还能简化查询,由于不必要反省是不是存在惯例NULL。
■思索利用ENUM列。假如有一个只含无限数量的特定值的列,那末应当思索将其转换为ENUM列。ENUM列的值能够更快地处置,由于它们在外部是以数值暗示的。
■利用PROCEDUREANALYSE()。假如利用的是MySQL3.23或更新的版本,应当实行PROCEDUREANALYSE(),检察它所供应的关于表中列的信息:
响应输入中有一列是关于表中每列的最好列范例的倡议。第二个例子请求PROCEDUREANALYSE()不要倡议含有多于16个值或取多于256字节的ENUM范例(可依据必要变动这些值)。假如没有如许的限定,输入大概会很长;ENUM的界说也会很难浏览。依据PROCEDUREANALYSE()的输入,会发明能够对表举行变动以使用更无效的范例。假如但愿变动值范例,利用ALTERTABLE语句便可。
■将数据装进BLOB。用BLOB存储使用程序中包装或未包装的数据,有大概使本来必要几个检索操纵才干完成的数据检索得以在单个检索操纵中完成。并且还对存储尺度表布局不容易暗示的数据或随工夫变更的数占有匡助。在第3章ALTERTABLE语句的先容中,有一个例子处置存储来自Web问卷的了局的表。该例子中会商了在问卷中增添成绩时,如何使用ALTERTABLE向该表追加列。
办理该成绩的另外一个办法是让处置Web的使用程序将数据包装成某种数据布局,然后将其拔出单个BLOB列。如许会增添使用程序对数据举行解码的开支(并且从表中检索出纪录后要对其举行编码),可是简化了表的布局,而且不必在变动问卷时对表举行变动。另外一方面,BLOB值也有本人的固有成绩,出格是在举行大批的DELETE或UPDATE操纵时更是云云。删除BLOB会在表中留下一个年夜空缺,在今后将需用一个纪录或多是分歧巨细的多个纪录来添补。
■对简单发生碎片的表利用OPTIMIZETABLE。大批举行修正的表,出格是那些含有可变长列的表,简单发生碎片。碎片欠好,由于它在存储表的磁盘块中发生不利用的空间。跟着工夫的增加,必需读取更多的块才干取到无效的行,从而下降了功能。恣意具有可变长行的表都存在这个成绩,但这个成绩对BLOB列更加凸起,由于它们尺寸的变更十分年夜。常常利用OPTIMIZETABLE有助于坚持功能不下落。
■利用分解索引。分解索引列偶然很有效。一种手艺是依据其他列创建一个散列值,并将其存储在一个自力的列中,然后可经由过程搜刮散列值找到行。这只对准确婚配的查询无效。(散列值对具有诸如“<”或“>=”如许的操纵符的局限搜刮没有效处)。在MySQL3.23版及以上版本中,散列值可使用MD5()函数发生。散列索引对BLOB列出格有效。有一事要注重,在MySQL3.23.2之前的版本中,不克不及索引BLOB范例。乃至是在3.23.2或更新的版本中,使用散列值作为标识值来查找BLOB值也比搜刮BLOB列自己更快。
■除非有需要,不然应制止检索较年夜的BLOB或TEXT值。比方,除非一定WHERE子句可以将了局刚好限定在所想要的行上,不然SELECT*查询不是一个好举措。如许做大概会将十分年夜的BLOB值无目标地从收集上拖过去。这是存储在另外一列中的BLOB标识信息很有效的另外一种情况。能够搜刮该列以断定想要的行,然后从限制的行中检索BLOB值。
■将BLOB值断绝在一个自力的表中。在某些情形下,将BLOB列从表中移出放进另外一个副表大概具有必定的意义,前提是移出BLOB列后可将表转换为定长行格局。如许会削减主表中的碎片,并且能使用定长行的功能上风。
每个人都在使用它。MySQL是开源LAMP组合的一个标准组件:Linux、Apache、MySQL和Perl/PHP。根据Evans的调查,LAMP组合的迅速推广很大程度上代表着MySQL的被广泛接受。 |
|