搜索
首页数据库mysql教程介绍DB2 10中SQL查询的快速性和可靠性改进

查询性能问题是用户在使用数据库时最关注的问题之一,同时也是 DB2 开发人员重点研究和改进的方向之一。DB2 V10.1 对查询性能进行了多方面的增强。本文将重点介绍 SQL 查询的快速性和可靠性的改进,涉及 PED,PEA,哈希排序以及统计信息的增强,并通过实例对

查询性能问题是用户在使用时最关注的问题之一。尤其对数据仓库的用户而言,大型报表的查询至关重要。DB2 V10.1 在 SQL 查询的快速性和可靠性上都有很大的改进。在快速性上,DB2 引擎通过对去重、聚合以及哈希连接的改进优化了查询性能,减少用户调优成本。在可靠性上,DB2 增强了统计信息收集功能,提高了优化器的准确性。本文将重点介绍上述改进,并通过实例对这些增强特性进行具体的讲解。

对常用 SQL 查询的增强

DB2 所有版本都非常关注 SQL 查询性能的优化,DB2 V10.1 包含了许多性能改进提高了许多常用 SQL 查询的速度。例如查询时通过部分提前去重(PED)、部分提前聚合(PEA)、在查询优化器中更广泛的应用哈希连接以及对统计信息的改进等这些方式来提高查询速度。这些算法的优化都是 DB2 V10.1 自动进行的,用户无需对其进行额外配置或者对 SQL 语句进行改变。虽然这些改进对用户而言是透明的,但是我们可以通过实例来观察这些新特性对查询的增强。

部分提前去重

PED(部分提前去重)是英文 Partial early distinct 的缩写,其核心是 : 通过哈希方法在查询过程中提前去掉大部分重复的行(做 distinct),这样在查询后期的操作(例如连接、排序等等)中涉及的数据量就会变小。例如在排序的时候,随着数据量的变小,相应的会降低耗尽排序堆内存的机会,在这种情况下,也就减少了使用相对较慢的磁盘来做临时缓冲区的概率。很明显,这种在查询中提前去重的做法会改进查询的效率。PED 并不会消除全部的重复行,因此查询结束前还需要做一次完整的 distinct 操作。

虽然 PED 对用户而言是透明的,但是我们可以通过查询 EXPLAIN_ARGUMENT 表来获知是否已经启用 PED。在 EXPLAIN_ARGUMENT 中引入了一个新值 (HASHED PARTIAL) 来表明某个查询是否应用了 PED:

  • 列:ARGUMENT_TYPE = UNIQUE 统
  • 并且列:ARGUMENT_VALUE = HASHED PARTIAL,这就表明 PED 新特性已经被应用了。

清单 1 查看 EXPLAIN_ARGUMENT 表中 PED 的特征值

				
select distinct(argument_type), VARCHAR(argument_value,30) as argument_value  
from explain_argument where argument_type = 'UNIQUE'

	 ARGUMENT_TYPE ARGUMENT_VALUE 
	 ------------- ------------------------------ 
	 UNIQUE        FALSE 
	 UNIQUE        HASHED PARTIAL 
	 UNIQUE        TRUE 

 3 record(s) selected.

在上面的清单 1 中我们可以看到:从 EXPLAIN_ARGUMENT 表中查询到了 PED 的特征值 Unique 和 HASHED PARTIAL,这就表明已经有查询应用了 PED 特性。

下面我们通过使用 db2exfmt 工具来查看 PED 在一个具体查询中的应用情况:

首先我们打开 explain 模式:

db2 set current explain mode explain

然后执行我们所关注的 SQL 查询:

SELECT DISTINCT c11, c12, c21, c22 from t1, t2 where c11 = c21

最后关闭 explain 模式并且用 db2exfmt 工具来输出查询计划:

db2 set current explain mode no 
db2exfmt -d dbname -g TIC -w -1 -n % -s % -# 0 -o out1.txt

在我们前面用 db2exfmt 中获取的 out1.txt 文件中,我们可以看到如下清单 2 所展示的查询计划,其中 pUNIQUE即表明该查询在初期就已经进行了 distinct 操作,这就是应用了 PED 特性。

清单 2 应用了 PED 的查询计划

				
		   RETURN 
			  (   1) 
				 Cost 
				 I/O 
				 | 
				 40 
			   TBSCAN 
			   (   2) 
			   427.872 
				 15 
				 | 
				 40 
			   SORT  
			   (   3) 
			   427.411 
				 15 
				 | 
			   2029.53 
			   HSJOIN 
			   (   4) 
			   278.035 
				 15 
			 /---+----\ 
		  1001        20.275 
		 TBSCAN      pUNIQUE
		 (   5)       (   6) 
		 135.161      132.519 
			8            7 
		   |            | 
		  1001          801 
	 TABLE: NEWTON    TBSCAN 
		 TABLE1       (   7) 
		   Q2         113.305 
						 7 
						| 
						801 
				  TABLE: NEWTON  
					  TABLE2 
						Q1

同时从 out1.txt 的后面部分,我们还可以看到清单 3 中的内容: PED 特性的特征值 Unique 和 HASHED PARTIAL。同时里面还包含了本次查询相关的系统资源开销,通过这些值的比较,我们可以获知应用 PED 特性后所带来的查询性能的提升效果。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询Aug 26, 2022 pm 02:07 PM

本篇文章给大家带来了关于SQL的相关知识,其中主要介绍了SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询的方法,文中通过示例代码介绍的非常详细,下面一起来看一下,希望对大家有帮助。

SQL Server解析/操作Json格式字段数据的方法实例SQL Server解析/操作Json格式字段数据的方法实例Aug 29, 2022 pm 12:00 PM

本篇文章给大家带来了关于SQL server的相关知识,其中主要介绍了SQL SERVER没有自带的解析json函数,需要自建一个函数(表值函数),下面介绍关于SQL Server解析/操作Json格式字段数据的相关资料,希望对大家有帮助。

聊聊优化sql中order By语句的方法聊聊优化sql中order By语句的方法Sep 27, 2022 pm 01:45 PM

如何优化sql中的orderBy语句?下面本篇文章给大家介绍一下优化sql中orderBy语句的方法,具有很好的参考价值,希望对大家有所帮助。

Monaco Editor如何实现SQL和Java代码提示?Monaco Editor如何实现SQL和Java代码提示?May 07, 2023 pm 10:13 PM

monacoeditor创建//创建和设置值if(!this.monacoEditor){this.monacoEditor=monaco.editor.create(this._node,{value:value||code,language:language,...options});this.monacoEditor.onDidChangeModelContent(e=>{constvalue=this.monacoEditor.getValue();//使value和其值保持一致i

一文搞懂SQL中的开窗函数一文搞懂SQL中的开窗函数Sep 02, 2022 pm 04:55 PM

本篇文章给大家带来了关于SQL server的相关知识,开窗函数也叫分析函数有两类,一类是聚合开窗函数,一类是排序开窗函数,下面这篇文章主要给大家介绍了关于SQL中开窗函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下。

如何使用exp进行SQL报错注入如何使用exp进行SQL报错注入May 12, 2023 am 10:16 AM

0x01前言概述小编又在MySQL中发现了一个Double型数据溢出。当我们拿到MySQL里的函数时,小编比较感兴趣的是其中的数学函数,它们也应该包含一些数据类型来保存数值。所以小编就跑去测试看哪些函数会出现溢出错误。然后小编发现,当传递一个大于709的值时,函数exp()就会引起一个溢出错误。mysql>selectexp(709);+-----------------------+|exp(709)|+-----------------------+|8.218407461554972

Monaco Editor怎么实现SQL和Java代码提示Monaco Editor怎么实现SQL和Java代码提示May 11, 2023 pm 05:31 PM

monacoeditor创建//创建和设置值if(!this.monacoEditor){this.monacoEditor=monaco.editor.create(this._node,{value:value||code,language:language,...options});this.monacoEditor.onDidChangeModelContent(e=>{constvalue=this.monacoEditor.getValue();//使value和其值保持一致i

如何在Python中根据运行时修改业务SQL代码?如何在Python中根据运行时修改业务SQL代码?May 08, 2023 pm 02:22 PM

1.缘起最近项目在准备搞SASS化,SASS化有一个特点就是多租户,且每个租户之间的数据都要隔离,对于数据库的隔离方案常见的有数据库隔离,表隔离,字段隔离,目前我只用到表隔离和字段隔离(数据库隔离的原理也是差不多)。对于字段隔离比较简单,就是查询条件不同而已,比如像下面的SQL查询:SELECT*FROMt_demoWHEREtenant_id='xxx'ANDis_del=0但是为了严谨,需求上需要在执行SQL之前检查对应的表是否带上tenant_id的查询字段

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具