当我们设计一个新的或分析一个现存的系统时,其中所要考虑的一个重要问题就是应用程序的设计问题。即使数据库设计得很好而且还经过优化处理,应用程序设计不适当还是会引起性能问题的 数据库。实践证明,如果应用程序存在设计上的问题,那么修改这些问题比调整数据库配置参数更能改善应用程序的性能。
例如,SQL是一种高级语言,具有很大的灵活性,从数据库中提取相同的数据可以用不同形式的SELECT语句来实现,但是,应用程序的性能却随着SELECT语句形式的不同而大相径庭,这是因为不同形式的SELECT语句具有不同的处理成本。在这种情况下,我们就应该选择那些处理成本低廉的SELECT语句,这样,应用程序才会有较好的性能。
DB2通用数据库本身提供一个SQL编译器,该编译器创建编译后的SQL语句,当该编译器编译SQL语句时,它将重新编写这些SQL语句,以生成一种更容易对其进行优化的形式,这个过程称之为“查询重写(query rewrite)”。
然后,SQL编译器产生许多满足用户查询要求的、可选的执行方案,并根据表、索引、列和函数的统计数字来评估每个方案的执行成本,最后,从中选取执行成本最低的方案,该过程称之为“查询优化(query optimization)”。
有一点很重要,需要我们注意,那就是不管存取方案的优劣,SQL编译器(包括查询重写和优化两个阶段)必须从中选择一个,以产生满足应用程序查询要求的结果集,因此,我们在编写查询代码时,只应查询我们需要的数据,不需要的数据就不要查询,这样做的目的是确保SQL编译器能够选择一个最好的存取方案。
编写SELECT语句时一般遵循以下七个方面的准则:
1、在SELECT列表中仅仅指明需要的列
我们在编写SELECT语句时,尽管有时候不需要用到表中所有的字段,但还是习惯用*(表示引用表中所有的字段)来指定表中所有的列,这样做在编程上确实很简单、方便,但这么做的后果是应用程序返回一些我们不需要的列,系统做一些不必要的处理,做一些无用功,徒耗系统宝贵的软、硬件资源,尤其当表中有很多字段时,这种浪费现象就越加明显;而且,这也不是良好的编程习惯,我们不应提倡。
2、使用谓词来限制返回的行数
在SQL编程语言中,按照评估过程中如何使用谓词、何时使用谓词,我们将谓词划分为四大类(这四类谓词各自有不同的处理成本),按性能由高至低排列如下:
范围界定谓词
索引参数谓词
数据参数谓词
剩余谓词
范围界定谓词是指那些限定索引扫描范围的谓词,它们为索引搜索提供键值的起始值和/或终止值。索引参数谓词不用于界定搜索范围,但可以根据索引对它进行评估,因为谓词中的列是索引中的一部分。例如,假设表staff中的索引定义在name,dept和years三个字段上,执行下面的SELECT语句:
SELECT name,job,salary FROM staff WHERE name=’John’ dept=10 years>5 |
头两个谓词(name=’John’和dept=10)是范围界定谓词,而years>5是索引参数谓词,因为单凭上述信息我们无法确定键years的起始值是多少,起始值可以是6,8,10,甚至更大。如果years的谓词是years>=5,那么,它就是范围界定谓词了,因为索引搜索可以从5开始。
数据库管理器在评估这些谓词的时候将利用索引数据,而不是读取数据库中的基本表。这些范围界定谓词和索引参数谓词通过减少需要从表中读取的行的数目来减少存取的数据页的数目。索引参数谓词不影响被存取的索引页的数目。
数据参数谓词是那些不能被索引管理器评估,却能被数据管理服务(DMS)评估的谓词。通常,这种谓词需要从基本表中存取个别行,如果需要的话,数据管理服务还会提取需要的列来评估该谓词。
例如,假设索引定义在表project的projno列上,而不是deptno列上,执行下面的查询:
SELECT projno,projname,repemp FROM project WHERE deptno=’D11’ ORDER BY projno |
谓词“deptno=’D11’”是数据参数谓词,因为没有索引定义在deptno列上,必须存取基本表来评估该谓词。
剩余谓词是指那些除了对基本表进行简单的存取操作之外,还要进行I/O操作的谓词,包括使用子查询的谓词(子查询中带有ANY,ALL,IN或SOME),以及读取LONG VARCHAR或大对象(LOB)数据的谓词(在DB2中,LONG VARCHAR、大对象和表是分开存放的)。
分享到:
相关推荐
### DB2数据库SQL语句大全 #### 1. 强制关闭所有应用程序 ```sql db2forceapplicationall ``` 此命令用于强制关闭所有正在运行的应用程序,确保在进行维护操作之前所有的应用程序都已关闭。 #### 2. 在线备份...
在现代数据库管理系统(DBMS)中,SQL语句的性能优化对于提高整体应用程序的响应速度和资源利用率至关重要。IBM DB2 Universal Database (UDB) 作为一款成熟且功能强大的数据库产品,提供了多种工具帮助用户监控和分析...
本文将深入探讨DB2数据库中的SQL注入语句,以及如何通过这些语句来猜解数据库结构和数据。 首先,SQL注入的基础原理是通过在合法的SQL查询语句中嵌入恶意代码,以改变原本的查询逻辑。在给定的示例中,攻击者试图猜...
3. **SQL Monitor监控**:利用DB2的SQL Monitor功能,可以实时监控SQL语句的执行情况,及时发现并解决性能瓶颈。 #### 二、索引策略与优化 索引对于提高SQL查询性能至关重要。合理设计和维护索引可以显著加快查询...
### DB2数据库性能优化小技巧详解 #### 一、Bufferpool优化 在DB2数据库中,Bufferpool(缓冲池)的设置对整个系统的性能有着重要的影响。合理的Bufferpool配置能够显著提升数据访问速度,减少I/O操作次数。下面将...
### DB2中常用SQL语句知识点详述 #### 数据库简介 DB2是IBM公司推出的一款关系型数据库管理系统,广泛应用于各种规模的企业级环境中。为了更高效地管理和操作数据库,掌握常用的SQL语句是非常必要的。SQL...
SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过在输入字段中 inject恶意SQL代码来访问或控制数据库。 在本手册中,我们将介绍如何在DB2数据库中进行SQL注入攻击的检测和防止。同时,我们还将提供一些实用...
深刻理解DB2的锁及并发机制、索引原理、数据库参数、优化器原理、SQL语句调优等内部机理才能针对性地快速提出解决问题的方法;快照、db2pd、db2expln及事件监控器等则是必须熟练掌握的工具。《DB2数据库性能调整和...
任何应用程序对数据库的操作最终都会转化为SQL语句。因此,SQL语句的执行效率直接影响到数据库系统的整体性能。据估计,SQL语句可能消耗掉数据库70%至90%的资源。不同的SQL语句写法可能会导致显著的性能差异。由于大...
SQL语句是应用程序与数据库之间交互的主要方式,其性能直接影响到整体应用的响应速度及数据库服务器的负载。根据统计,SQL语句可能消耗掉数据库70%至90%的资源,因此优化SQL不仅能够提升执行效率,还能显著减轻...
本文将详细介绍如何在DB2数据库中使用SQL语句来获取当前日期、当前时间和当前时间戳,并展示如何计算前一天的日期。 #### 获取当前日期(Current Date) 在DB2中,`CURRENTDATE`函数可以用来获取当前系统的日期。...
#### 一、DB2优化器:数据库性能的指挥官 DB2优化器是IBM DB2数据库管理系统中的关键组件,负责决定如何高效地执行SQL查询和其他数据库操作。其核心职责是在多种可能的执行计划中挑选出最优解,以最小化资源消耗...
结合具体的业务场景,通过监控SQL执行,我们可以制定相应的性能优化策略,如调整数据库参数、优化存储过程、重构SQL语句等,实现DB2性能的持续改进。 总的来说,通过对DB2中的SQL执行进行监控,我们可以全面了解...
预编译是指对SQL语句进行语法检查和优化的过程,绑定是指将SQL语句与DB2数据库进行绑定的过程,编译是指将预编译后的SQL语句转换为机器代码的过程。 在DB2嵌入式SQL应用程序的开发中,开发人员还需要了解DB2数据库...
为了弥补这一不足,《DB查询分析器》提供了一个强大而实用的功能——能够批量执行多条SQL语句,并返回每条语句的执行时间以及受影响的记录数量。此外,它还能识别并报告出错的SQL语句及其错误信息。 #### 二、DB...
标题与描述均聚焦于SQL Server, Oracle, 和DB2数据库中的SQL语句比较,这是一个对IT专业人士特别是数据库管理员(DBA)、开发人员以及对数据库技术感兴趣的人来说极为实用的主题。以下是对给定文件中提及的关键知识点...
同时,语法高亮的特性使得代码更加清晰易读,减少了因语法错误导致的问题,提升了编写和阅读SQL语句的效率。 其次,该软件对ERwin设计的ER图的支持是一项非常实用的功能。ER图(实体关系图)是数据库设计的重要工具...
DB2性能优化是一个复杂而关键的过程,涉及到多个层面的调整以确保数据库系统的高效运行。以下是一些关于DB2性能优化的重要知识点: 1. **系统配置调优**:这是优化的第一步,需要根据系统的硬件特性、负载情况以及...