从入门到实践
非关系型数据库
随着互联网技术的飞速发展,数据量呈爆炸式增长,传统的数据库系统在处理大规模、高并发、非结构化数据时逐渐暴露出性能瓶颈,非关系型数据库(NoSQL)应运而生,它以去中心化、高扩展性、灵活的数据模型等特点,成为处理大数据的重要工具,本文将详细介绍非关系型数据库的创建过程。
非关系型数据库的类型
非关系型数据库主要分为以下几类:
非关系型数据库创建步骤
经验案例
某电商公司采用MongoDB作为商品信息存储数据库,在创建过程中,他们遵循以下步骤:
问:非关系型数据库与传统关系型数据库相比,有哪些优势?
答:非关系型数据库具有以下优势:
(1)高扩展性:易于水平扩展,满足大规模数据存储需求。
(2)灵活的数据模型:支持多种数据类型,适应不同业务场景。
(3)高性能:读写速度快,适用于高并发场景。
问:如何选择合适的非关系型数据库?
答:选择非关系型数据库时,需考虑以下因素:
(1)业务需求:根据业务场景,选择适合的数据模型和存储方式。
(2)性能要求:考虑数据库的读写性能、扩展性等。
(3)成本预算:根据企业预算,选择合适的数据库产品。
《非关系型数据库原理与应用》作者:张晓辉,出版社:电子工业出版社。
《大数据技术原理与应用》作者:陈国良,出版社:清华大学出版社。
打跑得快技巧十句口诀是什么?
1、有大必须出;2、小牌不能留;3、记好上下张;4、看紧关键牌;5、大牌要牢记;6、算牌不能漏;7、牌权很重要;8、牌型要理好;9、报单大至小;10、心态要端正。
对于跑得快这个竞技游戏来说,技巧是十分重要的,如果没有掌握到其中的技巧,有时候拿到大牌也没有用。 其实跑得快与斗地主在某些技巧上是相通的,但是一些玩家对于棋牌的玩法都不是很精通,下面介绍一下口诀。
1、有大必须出
如果到了玩家自己的轮次中,而自己的手中又有可以压过上一名玩家出牌的牌,那就一定要出。 这不仅是跑得快的技巧,也是跑得快的游戏规则。
2、小牌不能留
玩家在游戏开始之前,可以先谋划一下自己的出牌次序,在计划的过程中,玩家一定要注意,小牌是不能留的,尤其是不能压后,在确保牌权可回收的情况下先走小牌,这才是跑得快的最佳打法。 毕竟跑得快不像斗地主,没有队友可以依靠,玩家只能靠自己。
3、记好上下张
跑得快也是需要记牌的,玩家在游戏的过程中,应该要记好自己的上家和下家分别打出了哪些牌,以便自己出牌的时候更有计划。 这样玩家在拿到牌权之后也不至于将牌权再打回到其他玩家手中。
4、看紧关键牌
我们都知道,在斗地主中,有三张关键牌是一定要记住的,分别是7、10和K。 而在跑得快中,K已经作为大牌被特殊记忆了,因此玩家只需要关注7和10这两张牌就可以了。 在跑得快的玩法中,顺子是威胁力很大的牌,因此玩家一定要把7和10这两张可以影响玩家组成顺子的牌看紧。
5、大牌要牢记
三人跑得快的玩法特殊,不管是十六张的玩法还是十五张的玩法,都需要排除掉一副扑克中的部分大牌,这给玩家的记牌提供了很多的便利。 相比于其他扑克的玩法,跑得快的大牌由于数量较少,所以更加容易记忆。
6、算牌不能漏
虽说跑得快玩法简单,但该有的步骤也还是应该有的,最起码算牌的过程玩家一定不可以漏掉。
7、牌权很重要
跑得快中牌权的重要性要高于任何一款扑克游戏中牌权的重要性。 这是因为在跑得快中,玩家有牌就必须出,这使得玩家有很多出牌技巧都不能使用,所以如果可以保证牌权时刻在握,那么玩家的胜率就要高上很多。
8、牌型要理好
玩家在开始游戏之前,应该先将自己的手牌理好。 这其实是在帮助玩家认识清楚自己的手牌,提前谋划好出牌的策略,以便后续有条理的出牌。
9、报单大至小
如果玩家发现自己的下家已经报单,那么玩家在出单张的时候就必须要从大至小的出。 要是玩家因为出小单而导致下家获胜,那么另一名玩家的输分也需要玩家一起赔付。
10、心态要端正
跑得快的玩家在游戏的过程中要端正自己的游戏态度,处于优势的时候不要骄傲,处于劣势的时候也不要紧张,放平心态,冷静的应对游戏中出现的问题,这才是玩家应该在游戏中保持的态度。
如何开办网站
要领一:确定网站主题 做网站,首先必须要解决的就是网站内容问题,即确定网站的主题。 美国《个人电脑》杂志(PC Magazine)评出了99年度排名前100位的全美知名网站的十类题材:第1类:网上求职;第2类:网上聊天/即时信息/ICQ;第3类:网上社区/讨论/邮件列表;第4类:计算机技术;第5类:网页/网站开发;第6类:娱乐网站;第7类:旅行;第8类:参考/资讯;第9类:家庭/教育;第10类:生活/时尚。 我们可以参看上面的分类,继续细分。 如果自己在某些方面有兴趣,或掌握的资料较多,也可以做一个自己感兴趣的东西,一者,你可以有自己的见解,做出自己的特色;二者,在制作网站时不会觉得无聊或者力不从心。 兴趣是制作网站的动力,没有创作热情,很难设计制作出优秀的作品。 对于内容主题的选择,要做到小而精,主题定位要小,内容要精。 不要去试图制作一个包罗万象的站点,这往往会失去网站的特色,也会带来高强度的劳动,给网站的及时更新带来困难。 记住:在互联网上只有第一,没有第二! 要领二:选择好域名 域名是网站在互联网上的名字。 一个非产品推销的纯信息服务网站,其所有建设的价值,都凝结在其网站域名之上。 失去这个域名,所有前期工作就将全部落空。 目前,做个人网站的很多都依赖免费个人空间,其域名也是依赖免费域名指向,如网易的虚拟域名服务,其实这对个人网站的推广与发展很为不利,不光是它“适时”开启的窗口妨碍了浏览者的视线和好感,让人一看就知道是个人网站,而且也妨碍了网页的传输速度。 所以,就我个人观点来说,首先花点钱去注册一个域名,独立的域名就是个人网站的第一笔财富,要把域名起得形象、简单、易记。 要领三:掌握建网工具 网络技术的发展带动了软件业的发展,所以用于制作Web页面的工具软件也越来越丰富。 从最基本的HTML编辑器到现在非常流行的Flash互动网页制作工具,各种各样的Web页面制作工具,下面是几款具有代表性的网页制作器: (1)HTML编辑器。 虽然HTML代码复杂,编辑和调试要花费大量的时间,但因HTML的稳定性、广泛支持性及可创建复杂的页面效果,仍受高级网页制作人员的青睐。 就目前来说,有众多的编辑器供选择,这些编辑器广泛支持复杂页面创建及高级HTML规范,使用较为普遍的有Hotdog等专业HTML编辑器。 (2)所见即所得的网页编辑器。 其中以Microsoft Frontpage为代表,它具有如Word一样的操作界面,熟知Word功能的操作者,只要稍加培训就能轻松编制网页。 而且,Frontpage还能解析网页的HTML源代码,并提供了预览支持。 但Frontpage的一些特殊显示功能并不能在其它非IE浏览器下实现。 所以Frontpage是一款非常适合初、中级网页制作人员使用的工具软件。 (3)现在非常流行的 Macromedia公司出品的Flash互动网页制作工具。 这是是一款功能非常强大的交互式矢量多媒体网页制作工具。 能够轻松输出各种各样的动画网页,它不需要特别繁杂的操作,也比JAVA小巧精悍!但它的动画效果、互动效果、多媒体效果十分出色。 而且还可以在Flash动画中封装Mp3音乐、填写表单等;并且由于Flash编制的网页文件比普通网页文件要小得多,所以大大加快了浏览速度。 这是一款十分适合动态Web制作的工具。 另外,个人网站制作者还需了解W3C的HTML4.0规范、CSS层叠样式表的基本知识、javascript、VBScript的基本知识。 对于常用的一些脚本程序如ASP、CGI、PHP也要有适当了解,还要熟练使用图形处理工具和动画制作工具以及矢量绘图工具,并能部分了解多种图形图像动画工具的基本用法,熟练使用FTP工具以及拥有相应的软硬件和网络知识也是必备的。 当然,互联网还是一个免费的资料库。 编制网页需要多种多样的按钮、背景还有各种各样图形、图片。 如果这些都要靠自己完成,既浪费时间又浪费金钱,而且还需要强大的图形、图片制作技术。 所以,为了省却这些麻烦,网站制作者完全可以从网上下载各种精美实用的图片、按钮、背景等网页素材。 要领四:确定网站界面 界面就是网站给浏览者的第一印象,往往决定着网站的可看性,在确定网站的界面时要注意以下三点: ①栏目与板块编排 构建一个网站就好比写一篇论文,首先要列出题纲,才能主题明确、层次清晰。 网站建设初学者,最容易犯的错误就是:确定题材后立刻开始制作,没有进行合理规划。 从而导致网站结构不清晰,目录庞杂混乱,板块编排混乱等。 结果不但浏览者看得糊里糊涂,制作者自己在扩充和维护网站也相当困难。 所以,我们在动手制作网页前,一定要考虑好栏目和板块的编排问题。 网站的题材确定后,就要将收集到的资料内容作一个合理的编排。 比如,将一些最吸引人的内容放在最突出的位置或者在版面分布上占优势地位。 栏目的实质是一个网站的大纲索引,索引应该将网站的主体明确显示出来。 在制定栏目的时候,要仔细考虑,合理安排。 在栏目编排时需要注意的是: ●尽可能删除那些与主题无关的栏目; ●尽可能将网站内最有价值的内容列在栏目上; ●尽可能从访问者角度来编排栏目以方便访问者的浏览和查询;辅助内容,如站点简介、版权信息、个人信息等大可不必放在主栏目里,以免冲淡主题。 另外,板块的编排设置也要合理安排与划分。 板块比栏目的概念要大一些,每个板块都有自己的栏目。 举个例子:ENET硅谷动力()的站点分新闻、产品、游戏、学院等板块,每个板块下面又各有自己的主栏目。 一般来说,个人站点内容较少,只要分个栏目也就够了,不需要设置板块。 如果有必要设置板块的,应该注意: ●各板块要有相对独立性; ●各板块要有相互关联; ●各板块的内容要围绕站点主题; ②目录结构与链接结构 网站的目录是指建立网站时创建的目录。 例如:在用Frontpage建立网站时都默认建立了根目录和Images子目录。 目录的结构是一个容易忽略的问题,大多数站长都是未经规划,随意创建子目录。 目录结构的好坏,对浏览者来说并没有什么太大的感觉,但是对于站点本身的维护,以后内容的扩充和移植有着重要的影响。 所以建立目录结构时也要仔细安排,比如: ●不要将所有文件都存放在根目录下。 有网站制作者为了方便,将所有文件都放在根目录下。 这样就很容易造成:文件管理混乱,搞不清哪些文件需要编辑和更新,哪些无用的文件可以删除,哪些是相关联的文件,影响工作效率;上传速度变慢,服务器一般都会为根目录建立一个文件索引,如果将所有文件都放在根目录下,那么即使只上传更新一个文件,服务器也需要将所有文件再检索一遍,建立新的索引文件,很明显,文件量越大,等待的时间也将越长。 ●按栏目内容建立子目录。 子目录的建立,首先按主栏目建立。 友情连接内容较多,需要经常更新的可以建立独立的子目录。 而一些相关性强,不需要经常更新的栏目,例如:网站简介、站长情况等可以合并放在一个统一目录下。 所有程序一般都存放在特定目录,例如:CGI程序放在cgi-bin目录,所有提供下载的内容也最好放在一个目录下,便于维护管理。 ●在每个主目录下都建立独立的Images目录。 一般来说,一个站点根目录下都有一个默认地Images目录。 将所有图片都存放在这个目录里很是不方便,比如在栏目删除时,图片的管理相当麻烦。 所以为每个主栏目建立一个独立的Images目录是方便管理的。 原因很简单,就是方便维护与管理。 其它需要注意的还有:目录的层次不要太深,不要超过3层;不要使用中文目录,使用中文目录可能对网址的正确显示造成困难;不要使用过长的目录,太长的目录名不便于记忆;尽量使用意义明确的目录,以便于记忆和管理。 网站的链接结构是指页面之间相互链接的拓扑结构。 它建立在目录结构基础之上,但可以跨越目录。 形象的说:每个页面都是一个固定点,链接则是在两个固定点之间的连线。 一个点可以和一个点连接,也可以和多个点连接。 更重要的是,这些点并不是分布在一个平面上,而是存在于一个立体的空间中。 一般的,建立网站的链接结构有两种基本方式: ●树状链接结构(一对一),这类似DOS的目录结构,首页链接指向一级页面,一级页面链接指向二级页面。 这样的链接结构浏览时,一级级进入,一级级退出,条理比较清晰,访问者明确知道自己在什么位置,不会“不知身在何处”,但是浏览效率低,一个栏目下的子页面到另一个栏目下的子页面,必须回到首页再进行。 ●星状链接结构(一对多),类似网络服务器的链接,每个页面相互之间都建立有链接。 这样浏览比较方便,随时可以到达自己喜欢的页面。 但是由于链接太多,容易使浏览者迷路,搞不清自己在什么位置,看了多少内容。 因此,在实际的网站设计中,总是将这两种结构混合起来使用。 网站希望浏览者既可以方便快速地达到自己需要的页面,又可以清晰地知道自己的位置。 所以,最好的办法是:首页和一级页面之间用星状链接结构,一级和二级页面之间用树状链接结构。 关于链接结构的设计,在实际的网页制作中是非常重要一环,采用什么样的链接结构直接影响到版面的布局。 ③进行形象设计 网站的设计可以从以下几点出发: ●设计网站标志(LOGO)。 LOGO是指网站的标志,标志可以是中文、英文字母,也可以是符号、图案等。 标志的设计创意应当来自网站的名称和内容。 比如:网站内有代表性的人物、动物、植物,可以用它们作为设计的蓝本,加以卡通化或者艺术化;专业网站可以以本专业有代表的物品作为标志。 最常用和最简单的方式是用自己网站的英文名称作标志,采用不同的字体、字母的变形、字母的组合可以很容易制作好自己的标志。 ●设计网站色彩。 网站给人的第一印象来自视觉冲击,不同的色彩搭配产生不同的效果,并可能影响到访问者的情绪。 “标准色彩”是指能体现网站型象和延伸内涵的色彩,要用于网站的标志,标题,主菜单和主色块。 给人以整体统一的感觉。 至于其它色彩也可以使用,但应当只是作为点缀和衬托,绝不能喧宾夺主。 一般来说,一个网站的标准色彩不超过3种,太多则让人眼花缭乱。 适合于网页标准色的颜色有:蓝色,黄/橙色,黑/灰/白色三大系列色。 ●设计网站字体。 和标准色彩一样,标准字体是指用于标志,标题,主菜单的特有字体。 一般网页默认的字体是宋体。 为了体现站点的“与众不同”和特有风格,可以根据需要选择一些特别字体。 制作者可以根据自己网站所表达的内涵,选择更贴切的字体。 需要说明的是:使用非默认字体只能用图片的形式,因为很可能浏览者的计算机里没有安装特别字体,那么辛苦设计制作便可能付之东流了。 ●设计网站宣传语。 也可以说是网站的精神、主题与中心,或者是网站的目标,用一句话或者一个词来高度概括。 用富有气势的话或词语来概括网站,进行对外宣传,可以收到比较好的结果。 要领五:确定网站风格 “风格”是抽象的,是指站点的整体形象给浏览者的综合感受。 这个“整体形象”包括站点的CI(标志,色彩,字体,标语)、版面布局、浏览方式、交互性、文字、语气、内容价值等等诸多因素,网站可以是平易近人的、生动活泼的也可以是专业严肃的。 不管是色彩、技术、文字、布局,还是交互方式,只要你能由此让浏览者明确分辨出这是你网站独有的,这就形成了网站的“风格”。 风格是有人性的,通过网站的色彩、技术、文字、布局、交互方式可以概括出一个站点的个性:是粗犷豪放的,还是清新秀丽的;是温文儒雅的,还是执著热情的;是活泼易变的,还是墨守成规的。 总之,有风格的网站与普通网站的区别在于:在普通网站上你看到的只是堆砌在一起的信息,你只能用理性的感受来描述,比如信息量多少,浏览速度快慢等;在有风格的网站上你可以获得除内容之外的更感性的认识,比如站点的品位,对浏览者的态度等。 在明确自己想给人以怎样的印象后,要找出网站中最有特色的东西,就是最能体现网站风格的东西。 并以它作为网站的特色加以重点强化、宣传。 总之,风格的形成不是一次定位的,你可以在实践中不断强化、调整、改进。 要领六:有创意的内容选择 好的内容选择需要有好的创意,作为网页设计制作者,最苦恼的就是没有好的内容创意。 网络上的最多的创意即是来自于虚拟同现实的结合。 创意的目的是为了更好的宣传与推广网站,如果创意很好,却对网站发展毫无意义,那么,网站设计制作者也应当放弃这个创意。 另外,主页内容是网站的根本之所在,如果内容空洞,即使页面制作地再怎样精美,仍然不会有多少用户。 从根本上说,网站内容仍然左右着网站流量,内容为王(Content Is King)依然是个人网站成功的关键。 要领七:推广自己的网站 网站的营销推广在个人网站的运行中也占着重要的地位,在推广个人网站之前,请确保已经做好了以下内容:网站信息内容丰富、准确、及时;网站技术具有一定专业水准,网站的交互性能良好。 一般来说,网站的推广有以下几种方式: (1)搜索引擎注册与搜索目录登录技巧 注册著名的搜索引擎站点是在技术上推广网站的第一步。 注册搜索引擎有一定的技巧,像AltaVista、搜索客这样的搜索引擎,它自动收录提交的网址。 另外,注意Meta的使用,不要提交分栏Frame页面,大部分搜索引擎不识别Frame,所以一定要提交有内容的Main页面。 而像Yahoo、搜狐等搜索目录网站采用手工方式收录网址,以保证收录网站的质量,在分类查询时获得的信息相关性比搜索引擎站点(靠Spider自动搜索的)更强。 由于搜索目录网站收录网站的人为因素相对较多,因此在提交网站时要注意遵守规则。 如Yahoo要求注册站点描述不超过25个单词。 在此要注意:将网址提交到最合适的目录下面,要认真详细的介绍网站,千万不要有虚假、夸张的成分。 (2)广告交换技巧 很多个人站点在相互广告交换时都提出了几个条件:第一,访问量相当;第二,首页交换。 显而易见,这种做法是为了充分利用广告交换。 以很多个人网站的经验,当与一个个人站点交换链接时,对方把网站的LOGO放到了友情连接一页,而不是首页时,很少有访客会来自那里。 通常在首页,广告交换才会有很好的效果。 (3)目标电子邮件推广 使用电子邮件宣传网址时,主要有如下技巧:可以使用免费邮件列表来进行,只要你申请了免费邮件列表服务,你就可以利用邮件列表来推广你的网站;可以通过收集的特定邮件地址,来发送信息到特定的网络群体,在特定网络群体中推广自己的网站;发送HTML格式的邮件,即使其内容与接收者关系不大,也不会被被当作垃圾信件马上删掉,人们至少会留意一下发送者的地址。 不过,在进行邮件推广的时候要注意网络道德。 要领八:支撑网站日常运行 当个人网站做到某一程度,就必须把赚钱提到议事日程上来,通常来说,个人网站获取资金通常有以下两个渠道: (1)销售网站的广告位 要销售网站的广告位,一般来说,每日的流量少于1万人次的网站在目前是不会吸引广告主的。 网站的专业性及商用性,以往的广告经验,技术以及设计要求等也会影响到广告的销售。 一般来说,WEB广告的收费有三种方式: ①CPM (Cost Per Million/Thousand) 放一个广告,它按每1,000人次来访问站点收费。 这方法对网站经营者最为合适,只要有人浏览该网页,就得钱,不管访问者对广告有无反应——是否会看或点击该广告。 ②点透(Click-through) 通过Banner广告点到了广告商的站点,这才算数,广告商青睐这个,他只为对自己广告感兴趣的人“套钱“。 网站经营者就不合适了,据一些调查资料表明,只有3%的访问者会去“CLICK”广告。 ③提成 (Commission) 根据访问者点击位于你站点上广告所带来的销售收入,从中跟做广告的厂商分成,这种方法对于网站的经营者来说,比上面两个都更加冒险。 通常的,个人网站的广告收费方法往往是第一、第二种方法的结合,站点和广告商都可少冒点险。 (2)与大型网站合作 另外,通过与大型网站合作,获取经费,也可以维持个人网站的日常运行。 不过,个人网站很容易会成为商业网站的附属品。 有时间和充沛的体力,再加上对新技术和技巧的学习和应用,你就能为自己在网上建一个家了。
mysql数据库性能测试
我理解的是你希望了解mysql性能测试的方法:其实常用的一般:选取最适用的字段属性MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。
因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。
例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。
同样的,如果可以的话,我们应该使用MEDIUMINT而不是BigIN来定义整型字段。
另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。
因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。
这样,我们又可以提高数据库的性能。
2、使用连接(JOIN)来代替子查询(Sub-Queries)MySQL从4.1开始支持SQL的子查询。
这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。
例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。
但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代。
例如,假设我们要将所有没有订单记录的用户取出来,可以用下面这个查询完成:SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )如果使用连接(JOIN).. 来完成这个查询工作,速度将会快很多。
尤其是当salesinfo表中对CustomerID建有索引的话,性能将会更好,查询如下:SELECT * FROM customerinfo LEFT JOIN salesinfoON =salesinfo. CustomerID WHERE IS NULL连接(JOIN).. 之所以更有效率一些,是因为 MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
3、使用联合(UNION)来代替手动创建的临时表MySQL 从 4.0 的版本开始支持 UNION 查询,它可以把需要使用临时表的两条或更多的 SELECT 查询合并的一个查询中。
在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。
使用 UNION 来创建查询的时候,我们只需要用 UNION作为关键字把多个 SELECT 语句连接起来就可以了,要注意的是所有 SELECT 语句中的字段数目要想同。
下面的例子就演示了一个使用 UNION的查询。
SELECT Name, Phone FROM client UNION SELECT Name, BirthDate FROM authorUNIONSELECT Name, Supplier FROM product4、事务尽管我们可以使用子查询(Sub-Queries)、连接(JOIN)和联合(UNION)来创建各种各样的查询,但不是所有的数据库操作都可以只用一条或少数几条SQL语句就可以完成的。
更多的时候是需要用到一系列的语句来完成某种工作。
但是在这种情况下,当这个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来。
设想一下,要把某个数据同时插入两个相关联的表中,可能会出现这样的情况:第一个表中成功更新后,数据库突然出现意外状况,造成第二个表中的操作没有完成,这样,就会造成数据的不完整,甚至会破坏数据库中的数据。
要避免这种情况,就应该使用事务,它的作用是:要么语句块中每条语句都操作成功,要么都失败。
换句话说,就是可以保持数据库中数据的一致性和完整性。
事物以BEGIN 关键字开始,COMMIT关键字结束。
在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。
BEGIN;INSERT INTO salesinfo SET CustomerID=14;UPDATE inventory SET Quantity=11WHERE item=book;COMMIT;事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。
5、锁定表尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。
由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。
如果一个数据库系统只有少数几个用户来使用,事务造成的影响不会成为一个太大的问题;但假设有成千上万的用户同时访问一个数据库系统,例如访问一个电子商务网站,就会产生比较严重的响应延迟。
其实,有些情况下我们可以通过锁定表的方法来获得更好的性能。
下面的例子就用锁定表的方法来完成前面一个例子中事务的功能。
LOCK TABLE inventory WRITESELECT Quantity FROM inventoryWHEREItem=book; inventory SET Quantity=11WHEREItem=book;UNLOCK TABLES这里,我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。
包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,不会有其它的访问来对 inventory 进行插入、更新或者删除的操作。
6、使用外键锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。
这个时候我们就可以使用外键。
例如,外键可以保证每一条销售记录都指向某一个存在的客户。
在这里,外键可以把customerinfo 表中的CustomerID映射到salesinfo表中CustomerID,任何一条没有合法CustomerID的记录都不会被更新或插入到salesinfo中。
CREATE TABLE customerinfo( CustomerID INT NOT NULL , PRIMARY KEY ( CustomerID )) TYPE = INNODB;CREATE TABLE salesinfo( SalesID INT NOT NULL, CustomerID INT NOT NULL, PRIMARY KEY(CustomerID, SalesID), FOREIGN KEY (CustomerID) REFERENCES customerinfo (CustomerID) ON DELETECASCADE) TYPE = INNODB;注意例子中的参数“ON DELETE CASCADE”。
该参数保证当 customerinfo 表中的一条客户记录被删除的时候,salesinfo 表中所有与该客户相关的记录也会被自动删除。
如果要在 MySQL 中使用外键,一定要记住在创建表的时候将表的类型定义为事务安全表 InnoDB类型。
该类型不是 MySQL 表的默认类型。
定义的方法是在 CREATE TABLE 语句中加上 TYPE=INNODB。
如例中所示。
7、使用索引索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(), MIN()和ORDERBY这些命令的时候,性能提高更为明显。
那该对哪些字段建立索引呢?一般说来,索引应建立在那些将用于JOIN, WHERE判断和ORDER BY排序的字段上。
尽量不要对数据库中某个含有大量重复的值的字段建立索引。
对于一个ENUM类型的字段来说,出现大量重复值是很有可能的情况,例如customerinfo中的“province”.. 字段,在这样的字段上建立索引将不会有什么帮助;相反,还有可能降低数据库的性能。
我们在创建表的时候可以同时创建合适的索引,也可以使用ALTER TABLE或CREATE INDEX在以后创建索引。
此外,MySQL从版本3.23.23开始支持全文索引和搜索。
全文索引在MySQL 中是一个FULLTEXT类型索引,但仅能用于MyISAM 类型的表。
对于一个大的数据库,将数据装载到一个没有FULLTEXT索引的表中,然后再使用ALTER TABLE或CREATE INDEX创建索引,将是非常快的。
但如果将数据装载到一个已经有FULLTEXT索引的表中,执行过程将会非常慢。
8、优化的查询语句绝大多数情况下,使用索引可以提高查询的速度,但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用。
下面是应该注意的几个方面。
首先,最好是在相同类型的字段间进行比较的操作。
在MySQL 3.23版之前,这甚至是一个必须的条件。
例如不能将一个建有索引的INT字段和BIGINT字段进行比较;但是作为特殊的情况,在CHAR类型的字段和VARCHAR类型字段的字段大小相同的时候,可以将它们进行比较。
其次,在建有索引的字段上尽量不要使用函数进行操作。
例如,在一个DATE类型的字段上使用YEAE()函数时,将会使索引不能发挥应有的作用。
所以,下面的两个查询虽然返回的结果一样,但后者要比前者快得多。
SELECT * FROM order WHERE YEAR(OrderDate)<2001;SELECT * FROM order WHERE OrderDate<2001-01-01;同样的情形也会发生在对数值型字段进行计算的时候:SELECT * FROM inventory WHERE Amount/7<24;SELECT * FROM inventory WHERE Amount<24*7;上面的两个查询也是返回相同的结果,但后面的查询将比前面的一个快很多。
第三,在搜索字符型字段时,我们有时会使用 LIKE 关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的。
例如下面的查询将会比较表中的每一条记录。
SELECT * FROM booksWHERE name like MySQL%但是如果换用下面的查询,返回的结果一样,但速度就要快上很多:SELECT * FROM booksWHERE name>=MySQLand name














发表评论