32
腾讯 第四十八期 管理部 堂主 http://km.oa.com/class 讲师 http://km.oa.com/group/class

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

Embed Size (px)

Citation preview

Page 1: 腾讯大讲堂48 数据库查询优化浅析

大 堂腾 讯 讲

第四十八期

研 管理部发

大 堂主 :讲 页 http://km.oa.com/class与 互 :讲师 动 http://km.oa.com/group/class

Page 2: 腾讯大讲堂48 数据库查询优化浅析

数据库查询优化浅析数据库查询优化浅析

AlexyangAlexyang无线产品部无线产品部2008101320081013

Page 3: 腾讯大讲堂48 数据库查询优化浅析

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

Page 4: 腾讯大讲堂48 数据库查询优化浅析

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

Page 5: 腾讯大讲堂48 数据库查询优化浅析

一、需要性能一、需要性能 // 查询优化的原查询优化的原因 因 影响性能的因素:整个系统环境影响性能的因素:整个系统环境软件:操作系统、中间件、应用程序、数软件:操作系统、中间件、应用程序、数

据库据库硬件:硬件: CPUCPU 、内存、磁盘、网络、内存、磁盘、网络上面任何一个都可能成为系统的性能瓶颈上面任何一个都可能成为系统的性能瓶颈

Page 6: 腾讯大讲堂48 数据库查询优化浅析

系统级性能优化的点系统级性能优化的点 操作系统:虚拟内存、文件系统格式、系统参数操作系统:虚拟内存、文件系统格式、系统参数

(( LINUXLINUX )) 中间件:日志、部署时去掉打印信息(打印信息中间件:日志、部署时去掉打印信息(打印信息

对性能影响较大对性能影响较大 )) 、工作线程数、连接池、、工作线程数、连接池、 JAVAJAVA垃圾回收模式、垃圾回收模式、 JAVAJAVA 内存设置内存设置

应用程序:使用连接池、合理的业务设计、尽可应用程序:使用连接池、合理的业务设计、尽可能不要对数据库操作进行同步、能不要对数据库操作进行同步、 JAVAJAVA 程序的性程序的性能优化(参考网络资源)能优化(参考网络资源)

数据库:工作线程、数据库:工作线程、 I/OI/O 线程、内存配置等、索线程、内存配置等、索引的利用、引的利用、 SQLSQL 改写、服务器代码改进改写、服务器代码改进

Page 7: 腾讯大讲堂48 数据库查询优化浅析

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

Page 8: 腾讯大讲堂48 数据库查询优化浅析

合理的逻辑设计合理的逻辑设计 以某实际应用系统为例,原来任务管理模块并发用户数只有以某实际应用系统为例,原来任务管理模块并发用户数只有 1515 个,个, 该模块用来显示所有待处理的任务,以及每个任务的里程碑个数。该模块用来显示所有待处理的任务,以及每个任务的里程碑个数。 经过检查,发现其实现如下:经过检查,发现其实现如下: 执行语句执行语句 SELECT COUNT(*) FROM TASK;SELECT COUNT(*) FROM TASK; select task_id from task order by task_id desc;select task_id from task order by task_id desc; 对结果集中的每条记录对结果集中的每条记录 {{ SELECT * FROM TASK_STEP WHERE TASK_STEP.TASK_ID=?SELECT * FROM TASK_STEP WHERE TASK_STEP.TASK_ID=? }}

分析:如果分析:如果 TASKTASK 表有表有 1000010000 条记录,需要向数据库发送条记录,需要向数据库发送 1000010000 个查询个查询。。

假设通讯使用了假设通讯使用了 100ms100ms ,每个查询的执行时间是,每个查询的执行时间是 20ms20ms 。使用的时间。使用的时间为:为:

(100ms+20ms)*10000=1200s=20min(100ms+20ms)*10000=1200s=20min

Page 9: 腾讯大讲堂48 数据库查询优化浅析

解决方案解决方案 select task_step.* select task_step.* from task,task_stepfrom task,task_step where task_step.task_id = task.task_idwhere task_step.task_id = task.task_id order by task.task_id desc;order by task.task_id desc;

备注:备注:11 )继续对)继续对 task_step.*task_step.* 处理,减少网络通讯量。处理,减少网络通讯量。 22 )默认看到自己的任务,提供连接查询其他任务)默认看到自己的任务,提供连接查询其他任务

。。

Page 10: 腾讯大讲堂48 数据库查询优化浅析

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

个唯一的个唯一的 IDID ,该系统使用数据库的一个表的一条整型记,该系统使用数据库的一个表的一条整型记录来维持。录来维持。

当新建一个任务时,取用该表的当前记录值,操作完毕后当新建一个任务时,取用该表的当前记录值,操作完毕后加加 11 。为了防止不同对象使用相同。为了防止不同对象使用相同 IDID ,使用如下方法来,使用如下方法来保证:保证:

int temp = 0;int temp = 0; synchronized{synchronized{ 执行执行 SELECT * FROM OBJECTID;SELECT * FROM OBJECTID; temp = temp = 结果集中的结果集中的 idid update update 结果集中的结果集中的 idid (( id+1id+1 )) }} insert into task values(temp,...);insert into task values(temp,...);

Page 11: 腾讯大讲堂48 数据库查询优化浅析

解决方案解决方案

create sequence myseq increment by 1;create sequence myseq increment by 1;

insert into task values(myseq.nextval,...);insert into task values(myseq.nextval,...);

Page 12: 腾讯大讲堂48 数据库查询优化浅析

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

Page 13: 腾讯大讲堂48 数据库查询优化浅析

SQL 语句的处理过程

Page 14: 腾讯大讲堂48 数据库查询优化浅析

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

Page 15: 腾讯大讲堂48 数据库查询优化浅析

对应的语法结构Select * from t1, t2, t3;

par_from_tv_list_struct 结构

par_from_tv_list_t* from_tv_list;

par_from_tv_t* from_tv

par_from_tv_list_struct 结构

par_from_tv_list_t* from_tv_list;

par_from_tv_t* from_tv

par_from_tv_list_struct 结构

par_from_tv_t* from_tv

par_from_tv_struct结构

T1

par_from_tv_struct结构

T2

par_from_tv_struct结构

T3

规则2 规

则1

Page 16: 腾讯大讲堂48 数据库查询优化浅析

语义分析数据库对象名字解析

合法性检查内部 ID 的转换

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

Page 17: 腾讯大讲堂48 数据库查询优化浅析

代价优化器 接受语义分析的输入 统计信息的分析

数据分布统计直方图

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

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

Page 18: 腾讯大讲堂48 数据库查询优化浅析

基于操作符的执行计划物理操作符

功能简单专一 , 完成特定的数据库操作如 : 连接 , 过滤 , 排序等

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

Page 19: 腾讯大讲堂48 数据库查询优化浅析

实例分析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

Page 20: 腾讯大讲堂48 数据库查询优化浅析

三、索引的本质以及调优三、索引的本质以及调优

Page 21: 腾讯大讲堂48 数据库查询优化浅析

需要了解的概念需要了解的概念索引 索引 聚集索引、非聚集索引聚集索引、非聚集索引唯一索引、非唯一索引唯一索引、非唯一索引单列索引、组合索引单列索引、组合索引

Page 22: 腾讯大讲堂48 数据库查询优化浅析
Page 23: 腾讯大讲堂48 数据库查询优化浅析
Page 24: 腾讯大讲堂48 数据库查询优化浅析

Clustered table/indexClustered table/index

Page 25: 腾讯大讲堂48 数据库查询优化浅析

lustered index on a clustered tablelustered index on a clustered table

Page 26: 腾讯大讲堂48 数据库查询优化浅析

lustered index on a clustered tablelustered index on a clustered table

Page 27: 腾讯大讲堂48 数据库查询优化浅析

lustered index on a clustered tablelustered index on a clustered table

Page 28: 腾讯大讲堂48 数据库查询优化浅析

lustered index on a clustered tablelustered index on a clustered table

Page 29: 腾讯大讲堂48 数据库查询优化浅析

索引调优的索引调优的 66 个知识点个知识点

11 、将索引和数据存放到不同的文件组、将索引和数据存放到不同的文件组22 、组合索引的使用、组合索引的使用33 、唯一索引与非唯一索引的差异、唯一索引与非唯一索引的差异44 、非聚集索引的作用、非聚集索引的作用55 、是不是使用非聚集索引的查询都需要进、是不是使用非聚集索引的查询都需要进

行聚集的查询行聚集的查询66 、创建索引的规则、创建索引的规则

Page 30: 腾讯大讲堂48 数据库查询优化浅析

执行计划执行计划单表执行计划单表执行计划多表执行计划多表执行计划

Page 31: 腾讯大讲堂48 数据库查询优化浅析

多表连接执行计划多表连接执行计划

11 、嵌套连接、嵌套连接22 、、 HASHHASH 连接连接33 、合并连接、合并连接44 、反合并连接、反合并连接55 、半连接、半连接66 、反半连接、反半连接

Page 32: 腾讯大讲堂48 数据库查询优化浅析

谢谢谢谢 !!