`

SQL优化之建立索引四

阅读更多


第九掌 屏蔽无用索引

继 续上面8的例子,由于实际查询中,还有涉及到DisposalCourseFlag=6的查询,而此时如果用上该字段上的索引,将是非常不明智的,效率也 极低。因此这种情况下,我们需要用特殊的方法屏蔽该索引,以便ORACLE选择其他字段上的索引。比如,如果字段为数值型的就在表达式的字段名后,添加 “+ 0”,为字符型的就并上空串:“||""”

如: select * from serviceinfo where DisposalCourseFlag+ 0 = 6 and workNo = '36' 。

不过,不要把该用的索引屏蔽掉了,否则同样会产生低效率的全表扫描。

第十掌 分解复杂查询,用常量代替变量

对于复杂的Where条件组合,Where中含有多个带索引的字段,考虑用IF语句分情况进行讨论;同时,去掉不必要的外来参数条件,减低复杂度,以便在不同情况下用不同字段上的索引。

继续上面9的例子,对于包含

Where (DisposalCourseFlag < v_DisPosalCourseFlag) or (v_DisPosalCourseFlag is null) and ....的查询,(这里v_DisPosalCourseFlag为一个输入变量,取值范围可能为[NULL,0,1,2,3,4,5,6,7]),可以 考虑分情况用IF语句进行讨论,类似:

IF v_DisPosalCourseFlag =1 THEN

Where DisposalCourseFlag = 1 and ....

ELSIF v_DisPosalCourseFlag =2 THEN

Where DisposalCourseFlag = 2 and ....

。。。。。。

第十一掌 like子句尽量前端匹配

因为like参数使用的非常频繁,因此如果能够对like子句使用索引,将很高的提高查询的效率。

例6:select * from city where name like ‘%S%’

以上查询的执行计划用了全表扫描(TABLE ACCESS FULL),如果能够修改为:

select * from city where name like ‘S%’

那 么查询的执行计划将会变成(INDEX RANGE SCAN),成功的利用了name字段的索引。这意味着Oracle SQL优化器会识别出用于索引的like子句,只要该查询的匹配端是具体值。因此我们在做like查询时,应该尽量使查询的匹配端是具体值,即使用 like ‘S%’。

第十二掌 用Case语句合并多重扫描

我们常常必须基于多组数据表计算不同的聚集。例如下例通过三个独立查询:

例8:1)select count(*) from emp where sal<1000;

2)select count(*) from emp where sal between 1000 and 5000;

3)select count(*) from emp where sal>5000;

这样我们需要进行三次全表查询,但是如果我们使用case语句:

select

count (sale when sal <1000

then 1 else null end) count_poor,

count (sale when between 1000 and 5000

then 1 else null end) count_blue_collar,

count (sale when sal >5000

then 1 else null end) count_poor

from emp;

这样查询的结果一样,但是执行计划只进行了一次全表查询。


第十三掌 使用nls_date_format

例9:

select * from record where to_char(ActionTime,'mm')='12'

这个查询的执行计划将是全表查询,如果我们改变nls_date_format,

SQL>alert session set nls_date_formate=’MM’;

现在重新修改上面的查询:

select * from record where ActionTime='12'

这样就能使用actiontime上的索引了,它的执行计划将是(INDEX RANGE SCAN)。

分享到:
评论

相关推荐

    数据库面试题索引sql优化

    - 对于频繁使用的JOIN操作中的关联列建立索引。 - 考虑使用复合索引来同时优化多个列的查询性能。 2. **减少全表扫描:** - 使用WHERE子句过滤记录,避免不必要的全表扫描。 - 使用适当的索引来加速查询。 3. ...

    数据库SQL优化大总结之 百万级数据库优化方案.pdf

    四、数据库SQL优化之避免使用OR操作符 4. 尽量避免在where子句中使用OR来连接条件,以免引擎放弃使用索引而进行全表扫描。 五、数据库SQL优化之IN和NOT IN操作符 5. IN和NOT IN操作符也要慎用,以免引擎放弃使用...

    SQL SERVER建立索引.pdf

    #### 四、用SQL建立索引 可以通过SQL语句来创建索引。例如,创建一个名为`IX_Orders_CustomerID`的非聚簇索引: ```sql CREATE NONCLUSTERED INDEX IX_Orders_CustomerID ON Orders(CustomerID); ``` 创建一个名...

    SQL Server 2000完结篇系列之七:SQL Server 2000索引优化详解

    - 索引维护:索引会增加写操作的开销,频繁更新的列不宜建立索引。 - 存储空间:索引需要额外的存储空间,应权衡性能提升与存储成本。 四、索引优化策略 1. 唯一性:索引的唯一性有助于提高查询效率,避免冲突。 2....

    sql命令优化小窍门

    SQL 命令优化小窍门 SQL 优化是数据库性能优化的关键部分,好的 SQL 命令优化可以大大提高查询速度和数据库性能。在 SQL 命令优化中,索引的建立和使用非常关键。本文总结了一些常用的 SQL 命令优化小窍门,旨在...

    优化SQL Server索引的小技巧

    在建立索引时,需要考虑数据类型和保存这些数据的 column。同时,也需要考虑数据库可能用到的查询类型以及使用的最为频繁的查询类型。对于 column 保存了高度相关的数据,并且常常被顺序访问时,最好使用 clustered ...

    收获,不止SQL优化--抓住SQL的本质1

    - **全书总结**:本书不仅是一本关于SQL优化的技术书籍,更是引导读者进入SQL优化世界的指南。通过丰富的案例、实战经验和深入的技术探讨,帮助读者建立起从宏观到微观的优化思路,并最终达到“爽”的境界。 - **...

    SQL优化-索引

    SQL优化中的索引是提升数据库查询性能的关键技术。索引可以理解为数据库中的一种特殊目录,帮助快速定位和访问数据。SQL Server提供了两种主要类型的索引:聚集索引(Clustered Index)和非聚集索引(Nonclustered ...

    DB2之SQL优化浅析.pdf

    ### DB2之SQL优化浅析 #### 一、为什么要做SQL优化 在DB2数据库管理中,SQL优化是一项至关重要的工作。SQL语句是应用程序与数据库之间交互的主要方式,其性能直接影响到整体应用的响应速度及数据库服务器的负载。...

    《基于Oracle的SQL优化》PDF版本下载.txt

    通过对《基于Oracle的SQL优化》一书的学习,我们可以了解到SQL优化不仅是数据库管理员的基本技能之一,也是每个开发人员都应该掌握的重要知识。通过采用合适的方法和技术,我们可以在很大程度上提升数据库系统的整体...

    索引的SQL语句优化

    **基于索引的SQL语句优化**是提升数据库查询效率的有效手段之一,它通过合理设计和利用索引,减少数据检索的时间消耗,从而提升整体系统性能。 #### 核心概念与原则 **降龙十八掌**,这里被比喻成18条关键的优化...

    DB2之SQL优化浅析

    ### DB2之SQL优化浅析 #### 为什么要做SQL优化 在DB2数据库管理系统中,SQL语句是操作数据库的主要手段。任何应用程序对数据库的操作最终都会转化为SQL语句。因此,SQL语句的执行效率直接影响到数据库系统的整体...

    sql优化、索引的建立和运用以及多表连接建索引的拙劣见解

    ### SQL优化、索引的建立和运用以及多表连接建索引的相关知识点 #### SQL优化概述 在数据库系统中,SQL语句的执行效率对于系统的响应时间和资源利用有着至关重要的影响。合理的SQL优化不仅可以显著提升查询速度,还...

    SQL Server的全文索引及优化.pdf

    优化过程中需要考虑全文索引的存储和管理方式,这些索引存储在SQL Server外部,大部分的全文查询处理由MSSearch完成。因此,如何合理配置和使用MSSearch是优化全文索引性能的关键。 在全文索引的组件结构中,关系...

    MySQL性能优化 SQL优化方法技巧

    - 对于频繁查询的字段建立索引。 **2. 选择合适的数据类型** - 选择最适合数据特性的数据类型,以减少存储空间的使用并提高性能。 **3. 限制返回结果集** - 使用LIMIT关键字来限制查询结果的行数。 **4. 使用JOIN...

    SQL Server 2000数据库中如何重建索引

    如果直接删除并重新创建聚集索引,那么所有的非聚集索引都需要被删除并重新建立两次,因为它们依赖于聚集索引的键来定位数据行。但是,通过`DROP_EXISTING`,你可以避免这个昂贵的过程,因为它会更新现有索引,而...

    如何写出高效率的SQL语句--SQL优化技巧

    如何写出高效率的SQL语句--SQL优化技巧 SQL 优化技巧是提高数据库性能的关键所在。编写高效率的 SQL 语句需要对索引的机制有一定了解,以下是关于索引的知识点: 索引的优点和局限 索引可以提高查询的效率,但会...

    sql优化加索引[参考].pdf

    SQL优化是一个复杂的过程,其中加索引是提升数据库性能的有效手段之一。本文旨在探讨基于索引的SQL优化策略,通过一系列实践建议,即所谓的“降龙十八掌”,帮助开发者理解和应用索引优化,以解决系统性能问题。 ...

Global site tag (gtag.js) - Google Analytics