查询性能问题是用户在使用数据库时最关注的问题之一,同时也是 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 特性后所带来的查询性能的提升效果。

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

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

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

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

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

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

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


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

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

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver Mac版
视觉化网页开发工具