`
firebirdyuan
  • 浏览: 13349 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何优化下面SQL语句

阅读更多
我有一个sql语句,查询时间比较长
SELECT * FROM 
(SELECT TEMP.*,ROWNUM RN FROM(SELECT ENP.ENP_NAME ,DETAIL.B_ENP_NAME ,GOOD.DRUG_NAME ,GOOD.PASS_NUM ,GOOD.MANU_NAME ,SALE.LOT_NUM ,NVL(DETAIL.SALE_AMOUNT,'0') || NVL(DETAIL.UOM,'') ,TO_CHAR(SALE.CREATE_DATE,'YYYY-MM-DD')   
FROM SALEDETAIL DETAIL 
LEFT JOIN SALE SALE ON SALE.ID=DETAIL.MAIN_ID 
LEFT JOIN GOODS_INFO GOOD ON GOOD.ID=SALE.DRUG_ID 
LEFT JOIN ENTERPRISE ENP ON ENP.ID=SALE.S_ENP_ID 
WHERE SALE.IS_SUBMIT=1   AND ENP.REGION_ID LIKE '31%'   
ORDER BY TO_CHAR(SALE.CREATE_DATE,'YYYY-MM-DD') DESC ) 
TEMP WHERE ROWNUM <=10) WHERE RN > 0


其中SALEDETAIL 大概有26万条记录
SALE 有20万条记录
GOODS_INFO 有1-2万条记录
ENTERPRISE大概有1-2条记录

目前这个查询需要耗时十几秒,太慢了,有什么好优化的地方吗(去掉order by到时很快,但客户是要求安时间排序)。SALEDETAIL 和SALE每天都在万数量级增加,数据库采用的ORACLE.

这个分页语句查询在去掉order by之后还是速度很快的。

但在做统计总记录数是慢了。
SELECT COUNT(*) FROM (SELECT DETAIL.ID FROM IDS_SALEDETAIL DETAIL LEFT JOIN SALE SALE ON SALE.ID=DETAIL.MAIN_ID LEFT JOIN GOODS_INFO GOOD ON GOOD.ID=SALE.DRUG_ID LEFT JOIN ENTERPRISE ENP ON ENP.ID=SALE.S_ENP_ID ) TOTALTABLE
统计的速度和获取分页的速度不是一个数量等级的差别。
分享到:
评论
2 楼 wuming_player 2008-02-21  
(1)表的数据量不小,要确保表上有索引,查询SQL的优化,索引起着非常重要的作用。
(2)left join 改为 (+).
(3)加上ORALCE的hint。
(4)order 的字段要加上索引。或者SQL语句中不要order,查询结果中在order也行。
1 楼 shxiao 2008-01-11  
不要使用like, 在SALE.CREATE_DATE上建立函数索引

相关推荐

    通过分析SQL语句的执行计划优化SQL(总结)

    这篇博客"通过分析SQL语句的执行计划优化SQL(总结)"深入探讨了这一主题,下面将对其中的主要知识点进行详细阐述。 1. **执行计划的理解**: 执行计划是数据库管理系统在执行SQL语句之前预先生成的一种详细步骤,它...

    sql语句优化心得

    ### SQL语句优化心得 #### 引言 在软件开发过程中,SQL语句的编写往往直接关系到应用程序的性能表现。特别是在系统初期阶段,由于数据量较小,即使编写了一些效率较低的SQL语句,也可能不会立即暴露出来。然而,...

    sql语句中用问号代替参数

    在SQL语句中,使用问号(`?`)作为参数占位符是一种常见的做法,尤其是在编程语言如Java中与数据库交互时。这种方式被称为预编译语句或参数化查询,它具有重要的安全性和性能优势。 ### SQL参数化查询的概念 参数化...

    mybatis直接执行sql语句后续之一

    在IT行业中,MyBatis是一个广泛使用的持久层框架,它允许开发者直接编写SQL语句,提供了灵活的数据访问和映射机制。这篇博客“mybatis直接执行sql语句后续之一”可能探讨了如何在MyBatis中高效且有效地执行SQL操作。...

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

    ### 通过分析SQL语句的执行计划优化SQL 在数据库管理与开发过程中,SQL语句的性能优化至关重要。本文将详细介绍如何理解SQL及其执行计划,并给出具体的优化策略。通过优化SQL,可以显著提升应用程序的响应速度及...

    vc++SQL语句嵌套

    下面我们将详细探讨SQL语句嵌套的概念、应用场景以及如何在VC++中实现。 首先,让我们理解SQL语句嵌套的基本概念。嵌套通常发生在`SELECT`语句中,其中包含一个或多个子查询,子查询的结果作为外部查询的一部分进行...

    动态SQL语句基本语法

    下面是动态SQL语句的一些基本语法和应用场景: 一、普通SQL语句可以用Exec执行 可以使用Exec语句来执行普通的SQL语句,例如: ```sql Exec('select * from tableName') Exec sp_executesql N'select * from ...

    OA系统常用SQL语句

    下面,我们将详细讨论OA系统中常见的SQL语句及其应用。 1. **人事管控**:在OA系统中,人事数据的管理和更新至关重要。例如,"01人事数据导入脚本.sql"可能包含了导入员工信息的SQL脚本,包括姓名、职位、入职日期...

    sql语句转string

    当我们在数据库客户端编写并测试了有效的SQL语句后,有时需要将这些语句集成到Java应用程序中,以便在运行时动态执行。这就涉及到了“SQL语句转String”这一过程。 首先,理解SQL语句转String的含义。它指的是将...

    Delphi adoquery处理多条SQL语句

    下面将详细介绍如何使用 Delphi 的 ADOQuery 组件来处理包含多个 SQL 语句的操作。 ##### 1. 将多条 SQL 语句组合成一个字符串 示例代码展示了如何构建一个包含多条 SQL 语句的字符串: ```delphi var sqlStr: ...

    ORACLE 优化sql语句提高oracle执行效率 .doc

    ORACLE 优化 SQL 语句提高 Oracle 执行效率 Oracle 是一个功能强大的关系数据库管理系统,然而,如果不正确地使用 SQL 语句,可能会导致执行效率低下。为了提高 Oracle 的执行效率,需要遵循一些最佳实践。下面是...

    Delphi中sql语句的使用总结

    ### Delphi中SQL语句的使用总结 在Delphi中使用SQL语句是与数据库进行交互的重要手段之一。本文将详细介绍如何在Delphi环境中构造和执行SQL查询,并给出具体的示例来帮助理解。 #### 一、基本SQL查询的构建 在...

    易语言SQL语句生成器

    《易语言SQL语句生成器》是一款专为易语言编程环境设计的工具,它能够帮助开发者自动生成SQL语句,极大地提高了开发效率。这款软件的核心功能包括:取后缀名、转换程序、取mdb表名以及生成局部变量语句等。下面我们...

    SQL 语句完全优化

    下面将从几个关键点出发,详细介绍如何对Oracle SQL语句进行完全优化。 #### 1. 选择高效的查询顺序 - **驱动表选择**:在多表连接查询中,选择合适的驱动表对于提高查询效率至关重要。通常来说,选择数据量较小...

    SQL语句手册.chm

    在“SQL语句手册.chm”中,我们可以期待找到关于SQL的全面介绍,包括其基本概念、语法以及如何执行各种操作。下面我们将深入探讨SQL的关键知识点。 1. **SQL基础**: SQL的基本组成部分包括数据定义语言(DDL)、...

    SQLServer实用SQL语句大全

    下面我们将深入探讨一些重要的SQL Server SQL语句和概念。 1. **基本查询**: - **SELECT**:SQL的基础在于SELECT语句,用于从一个或多个表中检索数据。你可以选择特定列、所有列,或者使用聚合函数(如COUNT、SUM...

    MSSQL性能监控SQL语句

    下面的SQL语句展示了如何列出使用次数最多且占用空间较大的查询计划: ```sql SELECT TOP 100 cp.cacheobjtype, cp.usecounts, cp.size_in_bytes, qs.statement_start_offset, qs.statement_end_offset, qt.dbid, ...

    易语言动态拼接sql语句

    下面将详细探讨易语言动态拼接SQL语句的相关知识点。 一、易语言基础 易语言是一种以自然语言为基础的编程语言,它的语法设计简洁明了,易于理解。在易语言中,编写SQL语句与在其他编程语言中的方式有所不同,因为...

    .net中无法创建sql语句解决方案

    在.NET框架中,开发人员经常会遇到与数据库交互的问题,特别是在使用C#进行SQL语句构建时。本篇文章将深入探讨当在.NET环境中遇到无法创建SQL语句问题时的解决策略,帮助开发者更好地理解和处理此类问题。 ### .NET...

Global site tag (gtag.js) - Google Analytics