`
yufenfei
  • 浏览: 802192 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一条SQL语句的优化

    博客分类:
  • DB2
 
阅读更多

最近发现系统中当数据量达到百万级别的时候一些SQL查询的速度慢的让人无法忍受,这个时候就要对相应SQL进行相应的调优。

 

1、如果是单表查询一般很简单,合理的优化SQL语句及建立索引或者联合索引基本上能够搞定

 

2、对于多表联合查询

 

     这里有一个视图VB_PAR_PARCELINFO,它由PAR_PARCELINFO ,PAR_PARCELADDRESS ,PAR_PARCELCONNECTION共用主键的三张表建立视图而来。

 

select * from ( 
select rownumber() over(order by t.CREATE_TIME desc) as rownumber_,
id,exp_Waybill_Num,cosign_Flag,take_Task_Num,send_Task_Num,goods_Payment_Method,rec_Countyname,rec_Address,
take_Member,send_Member,tracking_Status,arrive_Net_Time,arrive_Send_Time,take_task_time,send_task_time,SEND_FLAG,
APPOINT_STATUS 
from SCM_WULIU.VB_PAR_PARCELINFO t
where   CREATE_TIME >= '2000-01-01 00:00:00' and CREATE_TIME <= '2100-12-31 23:59:59' 
AND t.EXP_WAYBILL_NUM!='@'
and LOCATION =1922201 order by create_Time desc)
as temp_ where rownumber_ >0
fetch first 20 rows only 	

 

 

如果直接通过视图在百万级别的视图中检索,达到30多秒

 

注意:分页查询使用 fetch first 20 rows only 比 between and的效率高

 

 

通过视图查询效率较低,我直接通过关联查询来试一下

 

 

select * from ( 
select rownumber() over(order by c.CREATE_TIME desc) as rownumber_,
A.id,exp_Waybill_Num,a.goods_Payment_Method,
c.cosign_Flag,c.take_Task_Num,c.send_Task_Num,
c.take_Member,c.send_Member,c.tracking_Status,c.arrive_Net_Time,c.arrive_Send_Time,
c.take_task_time,c.send_task_time,c.SEND_FLAG,c.APPOINT_STATUS ,
b.rec_Countyname,b.rec_Address
from SCM_WULIU.PAR_PARCELCONNECTION c
left join SCM_WULIU.PAR_PARCELINFO a on a.ID=c.iD
left join SCM_WULIU.PAR_PARCELADDRESS b on a.ID=b.ID
where c.create_Time >= '2000-01-01 00:00:00' and c.create_Time <= '2100-12-31 23:59:59' 
and c.LOCATION =1922201 and c.APPOINT_STATUS is not null 
order by c.CREATE_TIME desc)
as temp_ where rownumber_ >0
fetch first 20 rows only 	
 

 

此时查询时间略有提高,但是还是很慢

 

。。。。。。。。。。

 

 

最后的SQL语句如下

 

 

select 
id,exp_Waybill_Num,cosign_Flag,take_Task_Num,send_Task_Num,goods_Payment_Method,rec_Countyname,rec_Address,
take_Member,send_Member,tracking_Status,arrive_Net_Time,arrive_Send_Time,take_task_time,send_task_time,SEND_FLAG,
APPOINT_STATUS 
from SCM_WULIU.VB_PAR_PARCELINFO r where r.ID in 
  (
  select ID from ( 
select rownumber() over(order by c.CREATE_TIME desc) as rownumber_, 
c.ID
from SCM_WULIU.PAR_PARCELCONNECTION c
left join SCM_WULIU.PAR_PARCELINFO a on a.ID=c.iD
left join SCM_WULIU.PAR_PARCELADDRESS b on a.ID=b.ID
where c.create_Time >= '2000-01-01 00:00:00' and c.create_Time <= '2100-12-31 23:59:59' 
 and c.LOCATION =1922201 and c.APPOINT_STATUS is not null 
  order by c.CREATE_TIME desc)
as temp_ where rownumber_ >0
fetch first 20 rows only 
) 
 

 

 

 

此时的分页查询由刚才开始的30多秒提高到650ms

 

 

分享到:
评论

相关推荐

    非常好用的SQL语句优化34条+sql语句基础

    以下是对"非常好用的SQL语句优化34条+sql语句基础"这一主题的详细解析: 1. **索引优化**:索引是提高查询速度的关键。创建合适的索引(主键、唯一索引、全文索引等)能显著提升数据检索效率。但同时要注意,过多的...

    SQL语句优化手册

    为了确保数据库系统能够高效地运行,SQL语句优化成为了提升系统性能的关键因素之一。SQL(Structured Query Language)是用于管理关系数据库的标准语言,其性能直接影响着数据库系统的整体响应时间和资源利用率。...

    一个完整程序只有一条SQL语句

    标题提到的"一个完整程序只有一条SQL语句",这展示了如何高效地利用SQL语句来完成数据操作。在这个程序中,开发者通过一条复杂的SQL语句,实现了对dataGrid的数据进行增、删、改、查(CRUD)操作。在C#环境下,...

    sql语句优化心得

    这条SQL语句旨在从`hm_member_ext`表中获取指定成员(`memberId=951`)的最新扩展信息。根据日志记录,可以看到: - `Query_time`: 查询总耗时为8.416321秒。 - `Rows_examined`: 共检查了18017行数据。 这表明...

    Delphi adoquery处理多条SQL语句

    示例代码展示了如何构建一个包含多条 SQL 语句的字符串: ```delphi var sqlStr: String; begin sqlStr := 'BEGIN'; sqlStr := sqlStr + 'UPDATE Table1 SET Col1=''test'' WHERE 1=2;'; sqlStr := sqlStr + '...

    SQL语句优化,语法优化

    SQL语句优化是数据库性能提升的关键环节,尤其是在大数据量的环境下。优化SQL语句能够显著提高查询速度,减少服务器负载,提升系统整体效率。以下是一些关于SQL语句优化的重要知识点: 1. **选择最有效的表名顺序**...

    最新整理的常用sql语句及优化大全

    本资源“最新整理的常用sql语句及优化大全”涵盖了SQL的基础使用和性能优化,对于数据库管理员、开发人员或是学习者来说,都是极具价值的学习资料。 一、SQL常用语句 1. **数据查询**:`SELECT`语句是SQL中最基本...

    索引的SQL语句优化

    **降龙十八掌**,这里被比喻成18条关键的优化策略,每一条都是针对特定情境下SQL语句优化的实战技巧。它们基于一个核心原则:**建立必要的索引**。这不仅是策略的基石,也是实现高效查询的前提条件。正确的索引能够...

    一般SQL语句优化整理

    ### 一般SQL语句优化整理 #### 概述 在数据库操作中,SQL查询语句是数据检索的核心,其性能直接影响到应用系统的响应时间和资源消耗。对于一般的SQL语句优化,不仅能够提升查询效率,还能改善用户体验。本文将对...

    通过分析SQL语句的执行计划优化SQL.doc

    当一条SQL语句首次执行并解析后,其执行计划会被存储在系统全局区域SGA的共享池中,供后续相同的SQL语句复用,避免重复解析带来的资源消耗。共享SQL语句的关键在于SQL文本的严格匹配,包括空格、换行等细节。通过...

    SQL语句优化方法分析与探讨.pdf

    例如,建议将所有的SQL语句关键字写在一行,每条SQL语句的开头关键字保持对齐,使用绑定变量等。遵循这些标准有助于数据库查询优化器更有效地重用已有的执行计划,减少系统资源的消耗。 最后,文章提到在SQL语句...

    SQL语句优化的34条建议

    SQL语句优化是数据库性能提升的关键,以下是对标题和描述中提到的知识点的详细说明: 1. **选择最有效的表名顺序**: 在Oracle中,解析器从右到左处理FROM子句中的表,因此应将记录条数最少的表放在最后,作为基础...

    2个SQL优化语句,查询出来哪条SQL语句占据资源最多.rar

    1. **性能监控**:了解SQL语句的执行情况是优化的第一步。数据库通常提供了丰富的性能监控数据,如`V$SQL`(Oracle)和`Performance Schema`(MySQL)。 2. **资源消耗指标**:CPU时间、执行次数、总执行时间等都是...

    SQL语句优化在学生考勤管理系统中的应用与研究.pdf

    本文以学生考勤管理系统为背景,探讨了SQL语句优化技术的两种主要途径——传统优化技术与人工智能自动优化技术,并对基于人工智能的自动SQL语句优化技术进行了详细说明。 首先,传统SQL语句优化技术依赖于数据库...

    oracle sql语句优化

    Oracle SQL语句优化是数据库管理中的重要环节,它涉及到如何高效地执行SQL查询,从而提高数据库性能和响应速度。在Oracle数据库系统中,SQL优化主要包括以下几个方面: 1. **优化器(Optimizer)**:优化器是Oracle...

    SQL语句优化总结

    SQL语句优化是一项重要的数据库管理技能,能够显著提高数据库查询性能,减少资源消耗,缩短响应时间。以下是对上述文件内容中提及的关键知识点的详细总结: 1. 选择最有效的表名顺序 在使用基于规则的优化器时,...

    浅析数据库系统中SQL语句的优化技术.pdf

    数据库系统中SQL语句优化技术是提高数据库性能的关键手段。优化SQL语句能直接减少对数据库资源的消耗,提升查询效率,降低系统负载。SQL语句的优化通常包含以下几个方面的知识点: 1. SQL语句优化的重要性: SQL...

    oracle一条sql语句分页

    需要注意的是,ROWNUM的计算是在SQL语句执行的过程中完成的,并且一旦为某一行分配了ROWNUM值后,这个值就不会再改变。这意味着,即使对表进行排序操作,ROWNUM的值也不会受到影响。 #### 2. 使用 ROWNUM 实现简单...

Global site tag (gtag.js) - Google Analytics