Upload
topgeek
View
1.337
Download
17
Embed Size (px)
Citation preview
一、需要性能一、需要性能 // 查询优化的原查询优化的原因 因 影响性能的因素:整个系统环境影响性能的因素:整个系统环境
软件:操作系统、中间件、应用程序、数软件:操作系统、中间件、应用程序、数
据库据库
硬件:硬件: CPUCPU 、内存、磁盘、网络、内存、磁盘、网络
上面任何一个都可能成为系统的性能瓶颈上面任何一个都可能成为系统的性能瓶颈
系统级性能优化的点系统级性能优化的点
操作系统:虚拟内存、文件系统格式、系统参数操作系统:虚拟内存、文件系统格式、系统参数(( LINUXLINUX ))
中间件:日志、部署时去掉打印信息(打印信息中间件:日志、部署时去掉打印信息(打印信息对性能影响较大对性能影响较大 )) 、工作线程数、连接池、、工作线程数、连接池、 JAVAJAVA垃圾回收模式、垃圾回收模式、 JAVAJAVA 内存设置内存设置
应用程序:使用连接池、合理的业务设计、尽可应用程序:使用连接池、合理的业务设计、尽可能不要对数据库操作进行同步、能不要对数据库操作进行同步、 JAVAJAVA 程序的性能程序的性能优化(参考网络资源)优化(参考网络资源)
数据库:工作线程、数据库:工作线程、 I/OI/O 线程、内存配置等、索线程、内存配置等、索引的利用、引的利用、 SQLSQL 改写、服务器代码改进改写、服务器代码改进
合理的逻辑设计合理的逻辑设计
以某实际应用系统为例,原来任务管理模块并发用户数只有以某实际应用系统为例,原来任务管理模块并发用户数只有 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
解决方案解决方案
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 )默认看到自己的任务,提供连接查询其他任务)默认看到自己的任务,提供连接查询其他任务
。。
尽量使用数据库提供的功能尽量使用数据库提供的功能
在某实际应用系统中,对于每个任务、日记等对象都有一在某实际应用系统中,对于每个任务、日记等对象都有一个唯一的个唯一的 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,...);
解决方案解决方案
create sequence myseq increment by 1;create sequence myseq increment by 1;
insert into task insert into task
values(myseq.nextval,...);values(myseq.nextval,...);
对应的语法结构
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
基于操作符的执行计划
物理操作符功能简单专一 ,完成特定的数据库操作
如 :连接,过滤 ,排序等
执行计划操作符的组合 ,构成树型的执行计划
执行时 ,数据从叶子向根流动
在根汇集成结果集 ,或者得到结果状态
计划被自动缓存 ,以备重用
索引调优的索引调优的 66 个知识点个知识点
11 、将索引和数据存放到不同的文件组、将索引和数据存放到不同的文件组
22 、组合索引的使用、组合索引的使用
33 、唯一索引与非唯一索引的差异、唯一索引与非唯一索引的差异
44、非聚集索引的作用、非聚集索引的作用
55 、是不是使用非聚集索引的查询都需要进行、是不是使用非聚集索引的查询都需要进行
聚集的查询聚集的查询
66、创建索引的规则、创建索引的规则
多表连接执行计划多表连接执行计划
11 、嵌套连接、嵌套连接
22 、、 HASHHASH 连接连接
33 、合并连接、合并连接
44、反合并连接、反合并连接
55 、半连接、半连接
66、反半连接、反半连接