没有合适的资源?快使用搜索试试~ 我知道了~
首页Informix 11 SQL性能调整
SQL 语言是关系型数据库与外界交互的重要途径,书写高效率的SQL 是每一个DBA 和开 发人员必备的技能。众所周知,不同的数据库各有所长,SQL 也有不同,为了帮助应用开 发者在最新版的INFORMIX数据库上书写高效的SQL,利用INFORMIX的最新功能对SQL 语句进行SQL 调优、追踪,本文以调整SQL 执行效率为最终目标,给大家介绍如何查看 INFORMIX 的SQL 执行计划,如何通过统计信息,SQLDirectives 调整执行计划,如何通 过SQL Drill-down监控SQL的执行效率,并且总结了书写SQL语句时若干需要注意的地方, 可以作为一个实用的SQL Cheklist使用。本文尽量减少理论的论述而注重实例分析和实际操 作,相信对大家一定会有所帮助
资源详情
资源评论
资源推荐
Draft by htyuan
Informix 11 SQL 性能调整
1 前言 ..........................................................................................................................................2
2 实验环境 ..................................................................................................................................2
3 SQL 执行计划..........................................................................................................................2
3.1 获取执行计划...........................................................................................................2
3.2 执行计划分析示例...................................................................................................5
3.2.1 实例 1:表的访问方式,sequencial scan 与 index scan..............................5
3.2.2 实例 2:连接方式............................................................................................8
4 统计信息 ................................................................................................................................11
4.1 统计信息基本知识.................................................................................................11
4.2 怎样更新统计信息.................................................................................................11
4.3 查看数据表的数据分布信息.................................................................................12
4.4 统计信息对 SQL 执行效率的影响 .......................................................................13
4.4.1 实例 1:..........................................................................................................13
4.4.2 实例 2:..........................................................................................................14
5 SQL Directives........................................................................................................................20
5.1 什么是 SQL Directives...........................................................................................20
5.2 INFORMIX 有哪些 SQL Directives: .................................................................20
5.3 怎样使用 SQL Directives.......................................................................................20
5.3.1 Using Directives: ORDERED......................................................................20
5.3.2 Using Directives: INDEX / AVOID_INDEX...............................................20
5.3.3 Using Directives: FULL / AVOID_FULL....................................................20
5.3.4 Using Directives: JOIN METHOD..............................................................21
5.3.5 Using Directives: OPTIMIZATION GOAL................................................21
5.3.6 一个复杂 SQL 的例子...................................................................................21
5.3.6.1 不加 Directives 的情况 ..........................................................................21
5.3.6.2 加 Directives 的情况 ..............................................................................22
6 SQL Tracing............................................................................................................................24
6.1 打开 SQL Tracing...................................................................................................26
6.1.1 通过设置 ONCONFIG 文件参数: ..............................................................26
6.1.2 通过 Admin Command...................................................................................27
6.1.3 一个 SQLTracing 的例子: ...........................................................................27
7 INFORMIX SQL 调整检查列表 ...........................................................................................29
7.1 在 select 语句中应指明需要访问的列名,而不要用*........................................29
7.2 使用 first, skip 关键词 ...........................................................................................29
7.3 避免不必要的算术运算符.....................................................................................30
7.4 避免不必要的函数运算.........................................................................................30
7.5 使用 exists 替代 distinct.........................................................................................31
7.6 Use OR instead of UNION on the same table.........................................................31
7.7 Use BETWEEN instead of IN................................................................................32
7.8 正确使用 index scan 和 sequential scan...............................................................32
8 总结 ........................................................................................................................................36
1 前言
SQL 语言是关系型数据库与外界交互的重要途径,书写高效率的 SQL 是每一个 DBA 和开
发人员必备的技能。众所周知,不同的数据库各有所长,SQL 也有不同,为了帮助应用开
发者在最新版的 INFORMIX 数据库上书写高效的 SQL,利用 INFORMIX 的最新功能对 SQL
语句进行 SQL 调优、追踪,本文以调整 SQL 执行效率为最终目标,给大家介绍如何查看
INFORMIX 的 SQL 执行计划,如何通过统计信息,SQLDirectives 调整执行计划,如何通
过 SQL Drill-down 监控 SQL 的执行效率,并且总结了书写 SQL 语句时若干需要注意的地方,
可以作为一个实用的 SQL Cheklist 使用。本文尽量减少理论的论述而注重实例分析和实际操
作,相信对大家一定会有所帮助。
2 实验环境
2 × Intel(R) Core(TM)2 Duo CPU T7700 @ 2.40GHz
2G Memory
100G Disk
OS: REH 64bits
IDS Version: 11.50.FC3
3 SQL 执行计划
关于执行计划,我们可以把它简单的理解成 SQL 语句执行时访问数据的方式。执行计划的
优劣是影响 SQL 执行效率的重要因素。它包括:查询优化器认为最优的数据访问路径,返
回记录数的估计值,SQL 的相对开销值,以及其他附属信息。
3.1 获取执行计划
获取执行计划有多种方式:
1. 在服务器上直接执行 SQL 语句 set explain on 得到当前 session 中 SQL 的执行计划描述
文件,默认名称为:sqexplain.out,
具体方式和操作如下:
在运行 IDS 的服务器上打开 dbaccess,通过 dbaccess 运行如下 SQL 语句
set explain on;
select first 10 *
from customer c, cust_calls u
where c.customer_num = u.customer_num
order by 1;
则在当前目录下生成 sqexplain.out 文件,内容如下:
QUERY: (OPTIMIZATION TIMESTAMP: 12-31-2009 10:56:35)
------
select first 10 c.customer_num, c.lname, c.company,
c.phone, u.call_dtime, u.call_descr
from customer c, cust_calls u
where c.customer_num = u.customer_num
order by 1;
Estimated Cost: 2326384
Estimated # of Rows Returned: 4318039
1) informix.c: INDEX PATH
(1) Index Keys: customer_num (Serial, fragments: ALL)
2) informix.u: INDEX PATH
(1) Index Keys: customer_num call_dtime (Serial, fragments: ALL)
Lower Index Filter: informix.c.customer_num = informix.u.customer_num
NESTED LOOP JOIN
Query statistics:
-----------------
Table map :
----------------------------
Internal name Table name
----------------------------
t1 c
t2 u
type table rows_prod est_rows rows_scan time est_cost
-------------------------------------------------------------------
scan t1 1 10000028 1 00:00.00 300003
type table rows_prod est_rows rows_scan time est_cost
-------------------------------------------------------------------
scan t2 10 4318026 10 00:00.00 0
type rows_prod est_rows time est_cost
-------------------------------------------------
nljoin 10 4318039 00:00.00 2326384
2. 如果我们不是直接在服务器上执行 SQL,而是通过应用程序远程连接到服务器,同样
可以使用 set explain on,但是此时 sqexplain.out 默认位置为当前用户的主目录下,如果使用
informix 用户运行,则文件产生在/home/Informix/目录下。
3. 通过 onmode –Y
比如我们有一个 session 连接到服务器,sessionID 为 22,则可以通过执行
onmode –Y 22 1
打开针对该 session 所有的 SQL 语句的执行计划生成功能,生成结果在用户主目录下,例 如
/home/informix, 文件名称格式为 sqexplain.out.<session_id> , 也 就 是
/home/Informix/sqexplain.out.22, 当然我们也可以通过”set explain file to“ 参数指定
sqexplain.out 的具体位置。
4. OAT
在打开 SQLtracing 功能的情况下,我们可以通过 OAT 工具查看,具体位置为:Performance
AnalysisàSQL ExploreràSQLàQuery Tree,如下图:
5. 通过第三方工具
例如 ServerStudio:
6. 通过系统表
如果 SQLtracing 打开,实际上我们可以在以下系统表中找到每条被追踪 SQL 的执行计划:
syssqltrace
sqltrace_iter
sqltrace_hvar.
一般,一条 SQL 语句的执行对应 syssqltrace 中一条记录,对应 sqltrace_iter 的多条记录。
3.2 执行计划分析示例
一般来说,执行计划包含以下几个部分的信息:
l 关于 SQL 的基本信息:包括 SQL 语句本身,估算的执行代价,和估算的返回记录数目。
l 执行计划:包括表的访问方式,连接方式,访问顺序,对索引和分区的处理等信息。
l 执行计划的统计信息:执行计划中每一步的更详细的信息,这部分只有 SQL 真正执行
以后才有,如果设置了 SET EXPLAIN ON AVOID_EXECUTE,则不产生。
当我们怀疑某个 SQL 的执行效率有问题时,需要首先检查并确认它的执行计划是否合适,
从而保证系统的效率。
3.2.1 实例 1:表的访问方式,sequencial scan 与 index scan
我们有 customer_t 数据表,1000000 行数据,在 customer_num 上建立有唯一索引:’ 169_81’,
并且刚刚做过高级别的统计信息更新。以下实例表明 sequencial scan 还是 index scan 在效率
上有很大的差别。
[informix@informix2 sqltuning]$ time echo "set explain on; select count(city) from customer_t
where customer_num < 2000000"| dbaccess demodb
Database selected.
剩余35页未读,继续阅读
philein123
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论3