渣渣小本求职复习之路每天一博客系列——数据库基础(MySQL)(5)

      前情回顾:昨天学习了MySQL中索引的设计与使用,还了解了一些常见的SQL注入攻击的手段以及防范方法,一般来说,在面试的时候如果不是要求比较高,基本就够用了。

      今天碰见一个拿了TP-LINK的offer的同学从图书馆回来,一边走一边聊了几句。我笑着说:拿了offer还去图书馆干嘛?他说没打算去。我问干嘛不去,他回答说准备专心考公务员。其实我前段时间,大概是半年前吧,也有考虑过考公务员。那时候主要是觉得自己技术渣,而且又不想去学,所以就经朋友介绍想考回深圳去工作。后来因为自己兴趣培养得还不错,而且也感觉自己的性格不太适合进体制,也就作罢了。

  听说做了公务员或者进了国企技术就废了,不知道是不是真的,大家比较有社会经验和见识的不妨给楼主说说啊。

      至于我自己嘛,专注复习基础知识,专注提高自己的水平,找工作要紧。

————————————————————————————闲聊结束————————————————————————————————————————

  今天的任务,主要是复习存储过程、函数、触发器,以及了解学习部分数据库优化的东西。现在,开始。

第九章:存储过程、函数、触发器

      第一节:什么是存储过程、函数、触发器

      存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。而触发器则是特殊的存储过程,触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

 存储过程和函数的区别在于函数必须有返回值,而存储过程没有,存储过程的参数可以使用IN、OUT、INOUT类型,而函数的参数只能是IN类型。

 其中,MySQL提供了多种内建函数帮助开发人员编写简单高效的SQL语句,其中常用的函数有字符串函数、日期函数和数值函数。有用到或者有兴趣了解的童鞋可以查询MySQL文档等相关资料。

 第二节:存储过程和函数的注意事项

 在资料中,有对存储过程和函数的相关操作进行讲解,介绍了变量、条件、光标、流程控制的定义和使用,这些就不一一说明了。

 存储过程和函数的优势是可以将数据的处理放在数据库服务器上进行,避免将大量的结果集传输给客户端,减少数据的传输,但是在数据库服务器上进行大量的复杂运算也会过度占用服务器的CPU,造成数据库服务器的压力。所以,不要在存储过程和函数中进行大量的复杂运算,应尽量将这些运算操作分摊到应用服务器上执行。

 第三节:触发器

 触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。
 

  需要注意的是触发器是行触发的。每次增加、修改或者删除记录都会触发进行处理,编写过于复杂的触发器或者增加过多的触发器对记录的插入、更新、删除操作肯定也是会有比较严重的影响。因此数据库设计的时候应该有所考虑,不要将应用的处理逻辑过多的依赖于触发器来处理。

  

      接下来,会讲一些关于数据库性能优化的内容,今天先讲一部分。

第十章:SQL技巧与优化

  第一节:SQL小技巧

      1.在SELECT等查询语句中使用正则表达式

         什么是正则表达式就不多说了,相信大家都知道。举个例子,如果要实现以下包含正则表达式的SELECT语句

SELECT name , email from table where email REGEXP "@163[.,]com$";

         使用普通的LIKE语句,就要写成下面这样,明显是比较长而且繁琐的

SELECT name , email from table where email like"@163%.com" or like"@163%,com"

      2.RAND()函数与ORDER BY子句配合使用,能够实现随机抽取样本的功能,举例就免了,这个技巧在进行数据统计的时候很方便。
      3.BIT函数与GROUP BY子句的联合使用在某些应用场合可以大大降低存储量,提高统计查询效率

       像这样的小技巧有很多,知道一些,在面试中讲出来能加点分。

  第二节:SQL优化

       首先,我们来讲讲当面对一个有SQL性能问题的数据库时,是怎样一步步进行系统分析,定位问题SQL并尽快解决问题的。

第一步:通过show status命令了解各种SQL的执行频率

第二步:定位执行效率较低的SQL语句

第三步:通过EXPLAIN分析低效SQL的执行计划

第四步:确定问题并采取相应的优化措施

       接下来,介绍两个简单实用的优化方法:

1.定期分析表和检查表,语法如下:

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [,tbl_name]...

2.定期优化表(只对MyISAM、BDB和InnoDB表起作用),语法如下:

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

       需要注意的是,执行期间将对表进行锁定,因此一定注意要在数据库不繁忙的时候执行相关的操作。

—————————————————————————————第十一天——————————————————————————————

  今天去了一场笔试,完了赶回来把今天的博客搞定。

1.随着复习的推进,好多之前没什么印象的、没怎么学过的内容都出来了,要多花点时间才行。由于进度原因,数据库(Mysql)系列就暂告一个段落了,明天开始下一个系列。

2.我打算明天写一篇内容多点的,认真点的博客,还是发首页吧。

3.我打算,如果关注我的人多了,就在写一些“文章”(不是现在所写的“随笔”),说一些我想说的话。

 

posted @ 2013-10-29 22:50  LevenYes  阅读(414)  评论(0编辑  收藏  举报