SQL语言艺术(笔记)

来源:互联网 发布:天空左岸java 编辑:程序博客网 时间:2024/05/21 19:22

1.保持数据库连接的稳定,因为每一次连接都会耗费大量资源,如图:

将要操作的数据组成对象,可以尽可能减少程序和数据库核心间的交互次数,从而使性能产生另一次飞跃。

看似简单的数据库连接隐藏着这些操作:

  1. 首先,客户端与远程服务器的监听程序(listener program)建立联系。
  2. 监听程序要么创建一个进程或线程来执行数据库核心程序,要么直接或间接地把客户请求传递给已存在的服务器进程
  3. 数据库还必须为每次session建立新环境,以跟踪他的行为。
  4. 建立新session前,DBMS还要执行登录触发器(logon trigger),还要初始化存储过程和程序包。
  5. 客户端进程和服务器进程还要完成握手协议。

还有程序和数据库之间的交互也有开销,即使数据库连接已经建立并且未中断,程序和DBMS核心之间的上下文切换(context switch)也是有代价的,所以,如果DMBS支持数据通过数组,对象传递,要毫不犹豫的使用它。

2.要重视业务处理,站的远一些,把握大局,比如能用union之类的聚合查询会比多次简单的查询效率高很多。

3.暂时工作表意味着已不太合理的方式存储更多信息。

4.尽可能多地把事情交给数据库优化器来处理。

5.在合理范围里,充分利用每一个数据库的连接尽可能完成尽量多的任务。

6.代码离DMBS核心越近,他就运行越快。

7.检查数据库活动,看他是否与当时正进行的业务活动保持合理的一致性。

8.有可能的话,用一个语句处理多个更新;尽量减少对同一表的重复访问。

9.优化器对自定义函数的代码无能为力。

10.SQL是声明性语言(declarative language),所以设法是你的代码超越业务过程的规格说明。

11.一般建议是进行防御式编程(code defensively),在开始处理之前检查所有参数的合法性,但实际上,对数据库编程而言,尽量同时做几件事的进攻式编程有切实的优势。

12.为了取得好的优化效果,应将大部分工作安排在关系层。

13.如果是若干个小查询,优化器将个个优化;如果是一个大的查询,优化器会把它作为一个整体优化。

14.使用SQL必须讨论的问题:

  1. 获得结果集所需访问的数据量(*)
  2. 定义结果集所需的查询条件
  3. 结果集的大小
  4. 获得结果集所涉及的表的数量
  5. 多少用户会同时修改这些数据

15.熟练的开发者应努力使响应时间与返回的记录数成正比

16.当视图返回不必要的元素时,别把视图内嵌在查询中,而是应将视图分解,将其组成部分加到查询主体中。