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

讨论如何优化这条sql

阅读更多
  SELECT *
             FROM (SELECT ROWNUM ROWSEQ, SQLA.*
                     FROM (SELECT *
                             FROM QMYS_V_ZLCS
                            WHERE 1 = 1
                              AND SPZT IN ('A', 'B', 'C', 'D')
                           ) SQLA)
            WHERE ROWSEQ BETWEEN 1 AND 15 ORDER BY QMYS_ZLCS_ID desc
哪位可以优化一下?谢谢!
分享到:
评论
1 楼 armorking 2008-09-12  
首先这条SQL是不对的
这个SQL,是个典型的SQL分页语句,
ORDER BY 条件应当放到最里面的子查询中

SELECT *
FROM (
    SELECT ROWNUM ROWSEQ, SQLA.*
    FROM (
        SELECT *
        FROM QMYS_V_ZLCS
        WHERE 1 = 1
            AND SPZT IN ('A', 'B', 'C', 'D')
        ORDER BY QMYS_ZLCS_ID desc
    ) SQLA
)
WHERE ROWSEQ BETWEEN 1 AND 15 



SPZT的IN条件,可以考虑写成 OR 的形式
当然,如果是ORACLE9I以上版本,ORACLE的SQL编译器会自动作如上优化

当SPZT的值取'A', 'B', 'C', 'D'的记录占总记录数的比例很小(比如说5%以下)时,
可以考虑在SPZT上加上索引,没有索引的话会造成全表扫描
而当这个比例比较大的时候,加上索引反而可能会变得更慢


可以考虑BETWEEN AND用<=和>=改写
SELECT *
FROM (
    SELECT ROWNUM ROWSEQ, SQLA.*
    FROM (
        SELECT *
        FROM QMYS_V_ZLCS
        WHERE (
            A.SPZT = 'A'
            OR A.SPZT = 'B'
            OR A.SPZT = 'C'
            OR A.SPZT = 'D'
        )
        ORDER BY QMYS_ZLCS_ID desc
    ) SQLA
    WHERE ROWNUM <= 15
)
WHERE ROWSEQ >= 1


当然,如果是单纯的想要查询前15条记录
可以用下面的这个SQL,少一层嵌套

SELECT ROWNUM ROWSEQ, SQLA.*
FROM (
    SELECT *
    FROM QMYS_V_ZLCS
    WHERE (
        A.SPZT = 'A'
        OR A.SPZT = 'B'
        OR A.SPZT = 'C'
        OR A.SPZT = 'D'
    )
    ORDER BY QMYS_ZLCS_ID desc
) SQLA
WHERE ROWNUM <= 15



另外,在ORACLE下可以用ROWNUMBER()函数改写这个SQL语句
SELECT *
FROM (
    SELECT 
        ROW_NUMBER() OVER(ORDER BY QMYS_ZLCS_ID desc) AS ROW_NO
        , A.*
    FROM QMYS_V_ZLCS A
    WHERE 
        (
            A.SPZT = 'A'
            OR A.SPZT = 'B'
            OR A.SPZT = 'C'
            OR A.SPZT = 'D'
        )
) X
WHERE X.ROW_NO BETWEEN 1 AND 15 



相关推荐

    SQL_Server_2008查询性能优化

    下面将详细讨论SQL Server 2008中的关键性能优化技巧。 首先,我们需要理解SQL查询执行的基础——查询计划。SQL Server通过解析查询语句,生成一个执行计划,然后按照这个计划来执行查询。优化查询计划是提高性能的...

    【整理】数据库面试题索引sql优化+数据库SQL优化总结之百万级数据库优化

    5. **SQL优化技巧**:这可能涉及重写SQL语句以减少资源消耗,比如使用连接操作而非子查询,或者避免在索引字段上使用否定条件。 6. **存储优化**:讨论表分区、分片、归档等策略,以提高读写效率和存储空间的管理。...

    关于SQL优化的电子书

    2. **在线资源**:O’Reilly出版社提供的《SQL in a Nutshell》、《SQL Pocket Guide》等书籍,以及官方网站oreilly.com和oreillynet.com,提供了丰富的学习材料和社区讨论,是学习SQL优化的好去处。 3. **培训与...

    sql优化小工具

    SQL优化小工具是一款非常实用的辅助程序,专为数据库管理员和开发人员设计,旨在帮助他们更有效地管理和优化SQL查询。这个工具的主要功能是将复杂的、难以阅读的SQL语句整理成清晰、规范的格式,提高代码的可读性...

    ORACLESQL性能优化.pptx

    通过对 SQL 语句执行的过程、Oracle 优化器、表之间的关联、如何得到 SQL 执行计划、如何分析执行计划等内容的讨论,可以逐步掌握 SQL 优化的过程。 在 SQL 优化过程中,需要了解性能管理、性能问题、调整的方法、...

    SQL查询思路优化与语句优化.pdf

    本资源摘要信息旨在讨论SQL查询思路优化与语句优化的重要性和方法。数据库查询优化是一个关键因素,影响数据库的推广和应用。SQL查询是一个有序的查询,不同语句的使用和顺序将直接影响其查询速度。 本文将讨论优化...

    SQL优化实例讲解

    综上所述,这篇文章从多个角度深入解析了SQL优化的理论与实践,涵盖了从数据表构建、查询优化到系统监控等各个环节,为读者提供了丰富的知识与实用技巧,是进行数据库性能调优不可或缺的参考资料。

    ORACLE SQL 优化 存储过程 PROCEDURE

    文章还讨论了存储过程的优化,包括如何使用 DB_LINK 实现数据库之间的数据交换、如何使用数据库审计来监控数据库的安全性等。这些知识点可以帮助开发者提高存储过程的效率和安全性。 实践经验 文章作者拥有五年的 ...

    informix数据库sql查询优化

    本文将围绕“informix数据库sql查询优化”这一主题展开讨论,重点介绍SQL单表查询优化的相关知识点。 #### SQL单表查询优化概述 单表查询是指仅涉及一个表的SQL查询语句。虽然这类查询通常比多表连接查询简单,但...

    Oracle 11g-SQL-优化

    在深入讨论Oracle 11g中SQL优化的知识点之前,首先需要了解Oracle Database 11g是什么。它是甲骨文公司(Oracle Corporation)推出的一款数据库管理系统,作为Oracle数据库的第11个主要版本,具有许多新的特性和增强...

    informix入门和SQL优化

    ### Informix入门与SQL优化详解 #### 一、Informix产品简介及安装配置 ##### Informix产品历程 Informix数据库自其诞生以来,经历了多个重要版本的迭代,从早期的Informix SE,到划时代的Online 5.0,再到如今的On...

    Effective MySQL之SQL语句最优化.pdf

    尽管如此,我将基于标题和描述中提供的关键词“Effective MySQL之SQL语句最优化”来构建知识点。 1. SQL语句最优化的概念:在数据库管理中,对SQL语句进行优化是提高数据库性能的关键环节。最优化的SQL语句能够在...

    数据库面试题索引sql优化

    ### 数据库面试题索引SQL优化 ...通过以上的分析和讨论,我们不仅深入了解了数据库面试中常见的SQL优化和索引相关的问题,还学习了一些实用的优化技巧。这些知识点对于提高数据库应用的性能至关重要。

    sql 性能优化文档下载

    以下将详细讨论SQL性能优化的一些关键知识点,结合提供的文件名,我们主要关注Oracle数据库的相关内容。 1. **理解SQL语句执行过程**: SQL语句在Oracle数据库中的执行涉及解析、优化和执行三个主要阶段。解析阶段...

    SQL优化指导示例2.pdf

    根据提供的文件内容,我们可以了解到文档《SQL优化指导示例2.pdf》主要讨论了在Vertica数据库系统中如何进行SQL语句的优化。Vertica是一个面向列的高性能分析数据库,特别适合于处理大规模数据集。本文的知识点涉及...

    SQL 性能优化工具

    SQL性能优化是一个重要的主题,尤其是在使用像SQL Server 2000这样的早期版本时,由于资源有限,优化显得更为关键。本系列课程主要关注通过理解并应用锁和事务管理来提升SQL查询的效率。 首先,我们要了解【锁和锁...

    关于SQL语句的优化

    本文主要讨论四个方面的SQL优化策略:操作符优化、SQL书写的影响、SQL语句索引的利用以及其他的优化技巧。 一、操作符优化 1. IN操作符:IN用于指定一个值列表,使得查询结果包含这些值中的任意一个。虽然IN易于...

    《Effective MySQL之SQL语句最优化》手册

    在数据库管理领域,SQL优化是提升系统性能的关键环节,尤其是在处理大数据量时,优化SQL语句能够显著减少查询时间,改善用户体验,同时减轻服务器负担。 首先,SQL优化的基础在于理解SQL语句的工作原理。SQL是...

    sql优化指南.pdf

    ### SQL优化指南知识点详解 #### 一、SQL优化的重要性及目标 - **目的**: 提升SQL语句的执行效率,从而提高整个应用程序的性能。 - **适用人群**: 所有与数据库应用相关的人员。 #### 二、SQL基础知识及优化规则 -...

    人工智能自动sql优化工具–SQLTuning for SQL Server

    5. **SQL优化**(SQL Tuning):这是我们要重点讨论的部分,它能自动分析并优化SQL语句,提高查询效率。 6. **压力测试**(Load Generator):模拟高负载环境,测试数据库在极端条件下的表现。 7. **数据生成**...

Global site tag (gtag.js) - Google Analytics