仓酷云

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

[学习教程] MYSQL教程之精晓数据库系列之进门-技能篇5

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:34:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
DBaaS并不意味着解决方案提供者要让自己失业。与其他系统一样,在实施DBaaS解决方案时,客户可能需要部署、迁移、支持、异地备份、系统集成和灾难恢复等方面的帮助。技能|数据|数据库年夜型数据库计划准绳  
思考收拾:南海
  一个好的数据库产物不即是就有一个好的使用体系,假如不克不及计划一个公道的数据库模子,不但会增添客户端和服务器段程序的编程和保护的难度,并且将会影响体系实践运转的功能。一样平常来说,在一个MIS体系剖析、计划、测试和试运转阶段,由于数据量较小,计划职员和测试职员常常只注重到功效的完成,而很难注重到功能的亏弱的地方,比及体系投进实践运转一段工夫后,才发明体系的功能在下降,这时候再来思索进步体系功能则要消费更多的人力物力,而全部体系也不成制止的构成了一个打补钉工程。笔者根据多年来计划和利用数据库的履历,提出以下一些计划原则,供同仁们参考。


定名的标准  

  

  分歧的数据库产物对工具的定名有分歧的请求,因而,数据库中的各类工具的定名、背景程序的代码编写应接纳巨细写敏感的情势,各类工具定名长度不要凌驾30个字符,如许便于使用体系顺应分歧的数据库。


游标(Cursor)的慎用  

  

  游标供应了对特定汇合中逐行扫描的手腕,一样平常利用游标逐行遍历数据,依据掏出的数据分歧前提举行分歧的操纵。特别对多表和年夜表界说的游标(年夜的数据汇合)轮回很简单使程序进进一个冗长的等特乃至逝世机,笔者在某市《住房公积金办理体系》举行日终帐户滚积数计息处置时,对一个10万个帐户的游标处置招致程序进进了一个无穷期的等特(后经测算需48个小时才干完成)(硬件情况:Alpha/4000128Mram,ScoUnix,Sybase11.0),后依据分歧的前提改成用分歧的UPDATE语句得以在二非常钟以内完成。


示比方下:  

  

DeclareMycursorcursorforselectcount_nofromCOUNT


OpenMycursor

FetchMycursorinto@vcount_no

While(@@sqlstatus=0)

 Begin

      If@vcount_no=’’前提1

         操纵1

     If@vcount_no=’’前提2

        操纵2

     。。。

      FetchMycursorinto@vcount_no

 End

。。。

。。。

改成

UpdateCOUNTset操纵1for前提1

UpdateCOUNTset操纵2for前提2

。。。

。。。

 在有些场所,偶然也非得利用游标,此时也可思索将切合前提的数据行转进一时表中,再对一时表界说游标举行操纵,可时功能失掉分明进步。笔者在某地市〈电信免费体系〉数据库背景程序计划中,对一个表(3万行中切合前提的30多行数据)举行游标操纵(硬件情况:PC服务器,PII26664Mram,NT4.0MsSqlserver6.5)。示比方下:

Create#tmp /*界说一时表*/

(字段1

字段2
。。。

)

Insertinto#tmpselect*fromTOTALwhere前提/*TOTAL中3万行切合前提只要几十行*/

DeclareMycursorcursorforselect*from#tmp

/*对一时表界说游标*/

。。。


索引(Index)的利用准绳

 创立索引一样平常有以下两个目标:保护被索引列的独一性和供应疾速会见表中数据的战略。年夜型数据库有两种索引即簇索引和非簇索引,一个没有簇索引的表是按堆布局存储数据,一切的数据均增加在表的尾部,而创建了簇索引的表,其数据在物理上会依照簇索引键的按次存储,一个表只同意有一个簇索引,因而,依据B树布局,能够了解增加任何一种索引均能进步按索引列查询的速率,但会下降拔出、更新、删除操纵的功能,特别是当添补因子(FillFactor)较年夜时。以是对索引较多的表举行频仍的拔出、更新、删除操纵,建表和索引时因设置较小的添补因子,以便在各数据页中留下较多的自在空间,削减页支解及从头构造的事情。


数据的分歧性和完全性  

  为了包管数据库的分歧性和完全性,计划职员常常会计划过量的表间联系关系(Relation),尽量的下降数据的冗余。表间联系关系是一种强迫性措施,创建后,对父表(ParentTable)和子表(ChildTable)的拔出、更新、删除操纵均要占用体系的开支,别的,最好不要用Identify属性字段作为主键与子表联系关系。假如数据冗余低,数据的完全性简单失掉包管,但增添了表间毗连查询的操纵,为了进步体系的呼应工夫,公道的数据冗余也是需要的。利用划定规矩(Rule)和束缚(Check)来避免体系操纵职员误输出形成数据的毛病是计划职员的另外一种经常使用手腕,可是,不用要的划定规矩和束缚也会占用体系的不用要开支,必要注重的是,束缚对数据的无效性考证要比划定规矩快。一切这些,计划职员在计划阶段应依据体系操纵的范例、频度加以平衡思索。


事件的圈套  

  事件是在一次性完成的一组操纵。固然这些操纵是单个的操纵,SQLServer可以包管这组操纵要末全体都完成,要末一点都不做。恰是年夜型数据库的这一特征,使得数据的完全性失掉了极年夜的包管。


  尽人皆知,SQLServer为每一个自力的SQL语句都供应了隐含的事件把持,使得每一个DML的数据操纵得以完全提交或回滚,可是SQLServer还供应了显式事件把持语句
----BEGINTRANSACTION入手下手一个事件
----COMMITTRANSACTION提交一个事件

----ROLLBACKTRANSACTION回滚一个事件

----事件能够嵌套,能够经由过程全局变量@@trancount检索到毗连的事件处置嵌套条理。

  必要加以出格注重而且极简单使编程职员出错误的是,每一个显现或隐含的事物入手下手都使得该变量加1,每一个事件的提交使该变量减1,每一个事件的回滚城市使得该变量置0,而只要当该变量为0时的事件提交(最初一个提交语句时),这时候才把物理数据写进磁盘。


数据库功能调剂  

  在盘算机硬件设置和收集计划断定的情形下,影响到使用体系功能的要素不过乎为数据库功能和客户端程序计划。而年夜多半数据库计划员接纳两步法举行数据库计划:起首举行逻辑计划,尔后举行物理计划。数据库逻辑计划往除一切冗余数据,进步了数据吞吐速率,包管了数据的完全性,分明地表达数据元素之间的干系。而关于多表之间的联系关系查询(特别是年夜数据表)时,其功能将会下降,同时也进步了客户端程序的编程难度,因而,物理计划需折中思索,依据营业划定规矩,断定对联系关系表的数据量巨细、数据项的会见频度,对此类数据表频仍的联系关系查询应得当进步数据冗余计划。


数据范例的选择  

  数据范例的公道选择关于数据库的功能和操纵具有很年夜的影响,有关这方面的书本也有很多的论述,这里次要先容几点履历。

Identify字段不要作为表的主键与别的表联系关系,这将会影响到该表的数据迁徙。
Text和Image字段属指针型数据,次要用来寄存二进制年夜型工具(BLOB)。这类数据的操纵比拟别的数据范例较慢,因而要避开利用。
日期型字段的长处是有浩瀚的日期函数撑持,因而,在日期的巨细对照、加减操纵上十分复杂。可是,在依照日期作为前提的查询操纵也要用函数,比拟别的数据范例速率上就慢很多,由于用函数作为查询的前提时,服务器没法用先辈的功能战略来优化查询而只能举行表扫描遍历每行。
  比方:要从DATA_TAB1中(个中有一个名为DATE的日期字段)查询1998年的一切纪录。

“MySQL实际上是一个数据库家族,你可以从选择一个并将其配置成可以满足你的大多数情况,”开源顾问公司Ethiqa的总裁如此表示,“因此,你可以在开始的时候选择一个小巧的版本产品,以后再根据需要来对其进行性能或大小上的扩展。”
分手快乐 该用户已被删除
沙发
发表于 2015-1-19 17:27:40 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
因胸联盟 该用户已被删除
板凳
发表于 2015-1-24 16:32:00 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
活着的死人 该用户已被删除
地板
发表于 2015-2-2 10:50:46 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
深爱那片海 该用户已被删除
5#
发表于 2015-2-7 18:24:43 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
若相依 该用户已被删除
6#
发表于 2015-2-22 22:18:36 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
老尸 该用户已被删除
7#
发表于 2015-3-7 03:34:43 | 只看该作者
光写几个SQL实在叫无知。
透明 该用户已被删除
8#
发表于 2015-3-14 10:51:00 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
若天明 该用户已被删除
9#
发表于 2015-3-21 04:21:17 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 06:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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