仓酷云

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

[学习教程] 发一篇教你怎样编写高效的MySQL数据库使用

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:14:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
“通过有能力的DBA的一个简单计划,MySQL可以达到令人难以想像的运行速度,”一位资深DBA如此表示。MySQL中没有多余的功能来拖累CPU或占用内存。借助诸如Apach、Perl、php和Python等工具,构建一个MySQL使用时很简单的。但是确保它们运转疾速,则必要一点洞察力。本文就是你必要晓得的器材。
MySQL关于成为一个十分疾速的数据库服务器有着当之无愧的名声,它也十分简单设置和利用。跟着它作为网站后端数据库得名誉日增,其效果在客岁入手下手有分明进步。可是良多MySQL用户更多地晓得怎样创立一个数据库并编写对它的查询。就像不计其数的人经由过程载空闲时用linux做实行来进修Unix那样,良多人经由过程玩MySQL进修干系数据库。这些MySQL老手的年夜多半既没有干系数据库实际的背景,又没偶然间浏览MySQL手册全文。
因而,我们决意研讨某些办法,你能够用针对优化功能来调治MySQL。在读完本文后,你将了解一些匡助你计划你的MySQL数据库和查询的手艺,值得你的使用很无效率。我们将假定你熟习MySQL和SQL基本,但不假定你有这两方面的博识常识。
只存储你必要的信息
这听上往是知识,但人们经常接纳“厨房下水道”的体例举行数据库计划。他们以为大概项要得每样器材都要存储并计划数据库保留一切者这些数据。你必要对你的需求实际些,并断定取的确必要甚么信息。你经常能随便发生一些数据而不把它存在数据库表中。在这类情形下,从一个使用开辟者的角度看也有事理如许做。
比方,在线目次的产物表大概包括各类产物的称号、先容、尺寸、分量和代价。除代价,你大概想存储每一个项目相干的税和运输本钱。但实践上不用如许做。起首税和运输本钱能够便利地(由你的使用或MySQL)盘算出来。其次,假如税和运输本钱改动了,你大概必需编写需要的查询更新每一个产物纪录中的税和运输的费率。
偶然人们以为这太难不克不及在今后往数据库表中到场字段,以是他们感到不能不界说尽量多的列。这是分明的观点毛病。在MySQL中,你能够用ALTERTABLE命令便利地修正表界说以顺应你改动的需求。
比方,假如你俄然熟悉到你必要给你的产物表增添一个级别列(大概你想同意用户在你的目次中给产物评级),你能够如许做:

ALTERTABLEPRoductsADDrankINTEGER

这给你的产物表增添了一个整数范例的级别列,你能用ALTERTABLE做甚么的完全先容拜见MySQL手册。
只需求你必要的器材--要明晰
就像说“只存储你必要的器材”那样,这大概看来是知识,但这一点经常被无视,为何呢?由于在一个使用开辟时,需求常常改动,以是良多查询终极看来是如许:
SELECT*FROMsometable

当你不克不及一定你将必要哪一列时,请求一切列分明是最省力的事变,但是跟着你的表不休增年夜和修正,这大概酿成一本性能成绩。最好是在你的最后开辟完成后再花些工夫并断定你真正从你的查询中必要甚么:
SELECTname,rank,descriptionFROMproducts

这带来了一个相干的概念,即代码保护比功能更主要。年夜多半酿成言语(Perl、Python、PHP、java等)同意经由过程字段名和数字编号会见一条查询的了局,这意味着你能够会见定名字段或字段0都能够失掉不异的数据。
临时看,最好利用列名而不是其编号地位,为何?由于一个表中或一条查询中地列的绝对地位能够改动。它们在表中大概由于反复利用ALTERTABLE而改动,它们在查询中将因重写了查询而健忘更新使用逻辑来婚配而改动。
固然,你仍旧必要当心改动列名!但假如你利用列名而非标号地位,如列名改动,你能够用grep搜刮源代码或利用编纂器的搜刮才能查找你必要修正的代码。
由于在MySQL中有如此众多的额外功能可选,诸如存储引擎等,你可以选择最适合你公司的一个,或者尝试选用多个引擎。MySQL开始非常小巧,但是可以随着公司的成长而不断地变强大。
柔情似水 该用户已被删除
沙发
发表于 2015-1-18 18:55:18 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
兰色精灵 该用户已被删除
板凳
发表于 2015-1-27 18:43:20 | 只看该作者
还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
变相怪杰 该用户已被删除
地板
发表于 2015-2-5 14:42:00 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
简单生活 该用户已被删除
5#
发表于 2015-2-12 08:55:52 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
乐观 该用户已被删除
6#
发表于 2015-3-3 02:05:41 | 只看该作者
入门没那么困难,精通没那么容易
山那边是海 该用户已被删除
7#
发表于 2015-3-11 08:59:09 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
小妖女 该用户已被删除
8#
发表于 2015-3-18 04:07:16 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-25 12:51:47 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-2 16:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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