仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 877|回复: 9
打印 上一主题 下一主题

[学习教程] MYSQL网页设计MYSQL列范例挑选与MYSQL查询效力

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:23:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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的被广泛接受。
透明 该用户已被删除
沙发
发表于 2015-1-19 10:08:56 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
莫相离 该用户已被删除
板凳
发表于 2015-1-19 10:08:57 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
不帅 该用户已被删除
地板
发表于 2015-1-27 06:25:08 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
admin 该用户已被删除
5#
发表于 2015-2-5 03:51:55 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
柔情似水 该用户已被删除
6#
发表于 2015-2-11 03:42:20 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
变相怪杰 该用户已被删除
7#
发表于 2015-3-1 20:52:08 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
若天明 该用户已被删除
8#
发表于 2015-3-10 23:45:00 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
山那边是海 该用户已被删除
9#
发表于 2015-3-17 16:10:23 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
小女巫 该用户已被删除
10#
发表于 2015-3-24 12:12:02 | 只看该作者
无法深入到数据库系统层面去了解和探究
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-19 18:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表