SQL语言艺术(笔记)
2012-02-15 09:38
197 查看
1.保持数据库连接的稳定,因为每一次连接都会耗费大量资源,如图:
![](http://hi.csdn.net/attachment/201202/15/0_1329269085YRTu.gif)
将要操作的数据组成对象,可以尽可能减少程序和数据库核心间的交互次数,从而使性能产生另一次飞跃。
看似简单的数据库连接隐藏着这些操作:
首先,客户端与远程服务器的监听程序(listener program)建立联系。
监听程序要么创建一个进程或线程来执行数据库核心程序,要么直接或间接地把客户请求传递给已存在的服务器进程
数据库还必须为每次session建立新环境,以跟踪他的行为。
建立新session前,DBMS还要执行登录触发器(logon trigger),还要初始化存储过程和程序包。
客户端进程和服务器进程还要完成握手协议。
还有程序和数据库之间的交互也有开销,即使数据库连接已经建立并且未中断,程序和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必须讨论的问题:
获得结果集所需访问的数据量(*)
定义结果集所需的查询条件
结果集的大小
获得结果集所涉及的表的数量
多少用户会同时修改这些数据
15.熟练的开发者应努力使响应时间与返回的记录数成正比
16.当视图返回不必要的元素时,别把视图内嵌在查询中,而是应将视图分解,将其组成部分加到查询主体中。
![](http://hi.csdn.net/attachment/201202/15/0_1329269085YRTu.gif)
将要操作的数据组成对象,可以尽可能减少程序和数据库核心间的交互次数,从而使性能产生另一次飞跃。
看似简单的数据库连接隐藏着这些操作:
首先,客户端与远程服务器的监听程序(listener program)建立联系。
监听程序要么创建一个进程或线程来执行数据库核心程序,要么直接或间接地把客户请求传递给已存在的服务器进程
数据库还必须为每次session建立新环境,以跟踪他的行为。
建立新session前,DBMS还要执行登录触发器(logon trigger),还要初始化存储过程和程序包。
客户端进程和服务器进程还要完成握手协议。
还有程序和数据库之间的交互也有开销,即使数据库连接已经建立并且未中断,程序和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必须讨论的问题:
获得结果集所需访问的数据量(*)
定义结果集所需的查询条件
结果集的大小
获得结果集所涉及的表的数量
多少用户会同时修改这些数据
15.熟练的开发者应努力使响应时间与返回的记录数成正比
16.当视图返回不必要的元素时,别把视图内嵌在查询中,而是应将视图分解,将其组成部分加到查询主体中。
相关文章推荐
- sql语言艺术(3)SQL的进攻式编程
- 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-01 T-SQL查询和编程基础
- 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-02 单表查询
- SQL Server笔记(一)数据库语言SQL
- sql学习笔记(一)----Transact语言
- 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-06 集合运算
- 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-08 数据修改
- 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-10 可编程对象
- oracle数据库----笔记1----oracle--SQL操纵语言-insert-update set-delete
- R 语言编程艺术笔记
- Oracle Database :Oracle11g SQL开发指南学习笔记之(3):结构化查询语言
- 24.笔记go语言——PostgrelSQL驱动使用
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(5)SAS宏语言、SQL过程
- 数据库笔记3————关系数据库标准语言SQL上(SQL的数据定义和数据更新)
- MySQL学习笔记_8_SQL语言基础复习
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(5)SAS宏语言、SQL过程
- SQL语言艺术实践篇——局外思考
- T-SQL 数据语言操作(运算符),笔记
- 【SQL 语言】SQL 语言学习笔记
- 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-07 透视、逆透视及分组集