腾讯大讲堂48-数据库查询优化浅析

更新时间:2023-08-06 19:23:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

腾讯大讲堂第四十八期研发管理部大讲堂主页:http://www.77cn.com.cn/class 与讲师互动:http://www.77cn.com.cn/group/class

数据库查询优化浅析

Alexyang 无线产品部 20081013

提纲应用级查询优化 SQL语句的解析方式 SQL语句的解析方式 索引的本质以及调优 分析执行计划

提纲应用级查询优化 SQL语句的解析方式 SQL语句的解析方式 索引的本质以及调优 分析执行计划

需要性能/ 一、需要性能/查询优化的原因影响性能的因素:整个系统环境 软件:操作系统、中间件、应用程序、数 据库 硬件:CPU、内存、磁盘、网络 硬件:CPU、内存、磁盘、网络 上面任何一个都可能成为系统的性能瓶颈

系统级性能优化的点操作系统:虚拟内存、文件系统格式、系统参数 (LINUX) LINUX) 中间件:日志、部署时去掉打印信息(打印信息 对性能影响较大)、工作线程数、连接池、JAVA垃 对性能影响较大)、工作线程数、连接池、JAVA垃 圾回收模式、JAVA内存设置 圾回收模式、JAVA内存设置 应用程序:使用连接池、合理的业务设计、尽可 能不要对数据库操作进行同步、JAVA程序的性能 能不要对数据库操作进行同步、JAVA程序的性能 优化(参考网络资源) 数据库:工作线程、I/O线程、内存配置等、索引 数据库:工作线程、I/O线程、内存配置等、索引 的利用、SQL改写、服务器代码改进 的利用、SQL改写、服务器代码改进

这里我们主要考虑以下两个点应用层存在问题。 数据库层存在问题。

合理的逻辑设计以某实际应用系统为例,原来任务管理模块并发用户数只有15个, 以某实际应用系统为例,原来任务管理模块并发用户数只有15个, 该模块用来显示所有待处理的任务,以及每个任务的里程碑个数。 经过检查,发现其实现如下: 执行语句SELECT 执行语句SELECT COUNT(*) FROM TASK; select task_id from task order by task_id desc; 对结果集中的每条记录 { SELECT * FROM TASK_STEP WHERE TASK_STEP.TASK_ID=? } 分析:如果TASK表有10000条记录,需要向数据库发送10000个查询。 分析:如果TASK表有10000条记录,需要向数据库发送10000个查询。 假设通讯使用了100ms,每个查询的执行时间是20ms。使用的时间为: 假设通讯使用了100ms,每个查询的执行时间是20ms。使用的时间为: (100ms+20ms)*10000=1200s=20min 100ms+20ms)*10000=1200s=20min

解决方案select task_step.* from task,task_step where task_step.task_id = task.task_id order by task.task_id desc; 备注: 1)继续对task_step.*处理,减少网络通讯量。 )继续对task_step.*处理,减少网络通讯量。 2)默认看到自己的任务,提供连接查询其他任务。

尽量使用数据库提供的功能在某实际应用系统中,对于每个任务、日记等

对象都有一 个唯一的ID,该系统使用数据库的一个表的一条整型记录 个唯一的ID,该系统使用数据库的一个表的一条整型记录 来维持。 当新建一个任务时,取用该表的当前记录值,操作完毕后 加1。为了防止不同对象使用相同ID,使用如下方法来保 。为了防止不同对象使用相同ID,使用如下方法来保 证: int temp = 0; synchronized{ 执行SELECT 执行SELECT * FROM OBJECTID; temp = 结果集中的id 结果集中的id update 结果集中的id(id+1) 结果集中的id(id+1) } insert into task values(temp,...);

解决方案create sequence myseq increment by 1; insert into task values(myseq.nextval,...);

二、SQL语句的解析方式 二、SQL语句的解析方式

SQL语句的处理过程 SQL语句的处理过程

语法/ 语法/词法分析负责解析SQL命令和过程性语句块 过滤注释,解析参数 使用成熟的工具(如YACC/LEX )生成 灵活的语法规则定义 便于语法的扩展与修改 生成统一格式的语法树

对应的语法结构Select * from t3;par_from_tv_list _struct结构

t1, t2,par_from_tv_list _struct结构

par_from_tv_list _struct结构

par_from_tv_list _t* from_tv_list; par_from_tv_t* from_tv

规 则 2

par_from_tv_list_ t* from_tv_list; par_from_tv_t* from_tv 规 则 1 par_from_tv_t* from_tv

par_from_tv_stru ct结构 T1

par_from_tv_stru ct结构 T2

par_from_tv_stru ct结构 T3

语义分析数据库对象名字解析合法性检查 内部ID的转换

权限检查 语法树数据结构的简化与预处理 DDL语句分解为对系统表的DML 视图对象的替换等

代价优化器接受语义分析的输入 统计信息的分析数据分布 统计直方图

代价的计算基于统计信息 操作符号的选择

基于成本的最优执行路径选择 生成优化的执行计划

基于操作符的执行计划物理操作符功能简单专一,完成特定的数据库操作 如:连接,过滤,排序等

执行计划操作符的组合,构成树型的执行计划 执行时,数据从叶子向根流动 在根汇集成结果集,或者得到结果状态 计划被自动缓存,以备重用

实例分析select * from A, B, C, D where A.a = B.b and B.b1 = C.c and C.c1 = D.d and A.a1 >123

本文来源:https://www.bwwdw.com/article/3uyj.html

Top