oracle11g基于SQL的优化之索引优化篇

合集下载

Oracle11G优化

Oracle11G优化

Oracle11G优化 我们以流⾏的4GB内存,32位系统为例:注意:SGA的所有参数设置均需要重启服务。

即设置完后,通过shutdown immediate关闭,通过startup重新启动。

增⼤系统全局区:SQL> alter system set sga_target=1200m scope=spfile; SQL> alter system set sga_max_size=1200m scope=spfile; 增⼤数据缓存区: SQL> alter system set db_cache_size=700m scope=spfile; 增⼤共享内存区: SQL> alter system set shared_pool_size=320m scope=spfile; 增⼤程序全局区: SQL> alter system set pga_aggregate_target=500m scope=spfile; 增⼤排序区: SQL> alter system set sort_area_size=30000000 scope=spfile; 增加连接数量: SQL> alter system set processes=600 scope=spfile; 三、查看参数: show parameters 查看所有参数 show parameters db 查看所有名称带db的参数 show parameters log 查看所有名称带log的参数 (依此类推) 四、注意事项: 在32位的系统上,ORACLE的SGA+PGA区的⼤⼩是不能超过1.7GB的,需要特别的调整,但除⾮必要⼀般不推荐这么做。

但是,根据以往的使⽤经验,SGA区在WINDOWS下开到1.5G以上就有可能不稳。

shared_pool_size 与db_cache 都在SGA内,所以这两项的⼤⼩加在⼀起⼀定要⼩于SGA。

oracle11g基于SQL的优化之索引优化篇

oracle11g基于SQL的优化之索引优化篇

Oracle11g 基于SQL语句性能优化通过索引对SQL进行优化主讲人:***所在部门:运维部一、概述本文所介绍的索引案例是在使用的是Oracle11g 11.2.0.4 数据库运行的。

索引是使用最为普遍的一种优化SQL的方法,不同索引均有各自的优缺点。

实际优化中需要综合考虑各种环境因素对运行慢的SQL进行优化。

常见环境因素有:数据库表及索引的统计信息、列的柱状图,优化器的模式,表上是否有触发器,表上是否创建了物化视图日志,SQL语句是否使用提示符,当前会话的等待事件等。

Oracle数据库中索引可分为B-TREE索引、BitMap索引、全文索引三大类。

按索引列的数量不同可分为,单列索引,多列索引。

按列值是否唯一可分为唯一索引和非唯一性索引。

二、B-TREE索引B-TREE索引常常用在OLTP数据库中,为了提高查询性,但同时一个表中索引数据多时会影响DML语句的性能,所以需要全面考虑增加索引后利弊。

2.1索引分类主键索引、唯一键索引、非唯一键索引、多列组合索引。

当表在创建主键时系统会自动为主键列或列的组合上创建唯一索引,主键索引性能最好。

其它索引性能好坏取决于单列或多列的数据选择性,如果索引访问的数据小,性能相对较高,因为访问索引和表的块较少因而性能好。

2.2扫描方式索引唯一扫描、索引范围扫描,全索引扫描,快速全索引扫描,索引跳跃扫描。

2.3上机实践2.3.1 索引唯一扫描例子:unique.txt注意:由于唯一索引的列中可为空值。

如果查询条件中有如下写法,则无法走索引扫描。

因为b-tree索引中不存储空值。

(1)select * from tab where col is null(2)select * from tab where col is not null(3)select count(0) from tab;其中(3)中的语句是否走索引取决于唯一索引的列上是否为非空,如果是非空,则会走“INDEX FAST FULL SCAN”快速索引扫描(采用并行索引扫描方式进行取读索引块,效率非常高)。

OracleSQL性能优化及案例分析

OracleSQL性能优化及案例分析

OracleSQL性能优化及案例分析标题:Oracle SQL性能优化及案例分析一、引言Oracle数据库作为全球最受欢迎的数据库之一,其性能优化问题一直是用户和开发者的焦点。

尤其是在处理大量数据或复杂查询时,性能问题可能会严重影响应用程序的响应时间和用户体验。

因此,对Oracle SQL进行性能优化及案例分析显得尤为重要。

二、Oracle SQL性能优化1、索引优化索引是提高Oracle SQL查询性能的重要工具。

通过创建合适的索引,可以大大减少查询所需的时间,提高数据库的响应速度。

然而,过多的索引可能会导致额外的存储空间和插入、更新、删除的性能损失。

因此,需要根据实际应用的需求,合理地选择需要索引的字段。

2、查询优化编写高效的SQL查询语句也是提高Oracle SQL性能的关键。

这包括选择正确的查询语句、避免在查询中使用复杂的子查询、使用连接(JOIN)代替子查询等。

还可以使用Oracle SQL Profiler来分析和优化查询语句的性能。

3、数据库参数优化Oracle数据库有许多参数可以影响SQL性能,如内存缓冲区、磁盘I/O参数等。

根据实际应用的需求和硬件环境,对这些参数进行合理的调整,可以提高Oracle SQL的性能。

三、案例分析1、案例一:索引优化问题描述:在一个电商系统中,用户在搜索产品时,使用全文本搜索功能时经常出现延迟。

解决方案:通过分析用户搜索的习惯和需求,对产品表的名称和描述字段创建全文索引。

同时,调整Oracle的全文搜索参数以提高搜索效率。

2、案例二:查询优化问题描述:在一个银行系统中,客户查询自己的贷款信息时,查询时间过长。

解决方案:通过使用Oracle SQL Profiler分析查询语句,发现查询中存在复杂的子查询。

将子查询改为连接(JOIN)方式,减少了查询时间。

3、案例三:数据库参数优化问题描述:在一个大型电商系统中,用户在访问高峰期经常遇到响应时间过长的问题。

Oracle11g优化

Oracle11g优化
转换的查询 评估器 查询 + 评估 计划生成器 统计信息 字典
查询计划
(发送至行源生成器)
10-3
版权所有 © 2008,Oracle。保留所有权利。
选择度
• 选择度表示行源中的一小部分行。
– 选择度会影响对 I/O 成本的估计。 – 选择度会影响排序成本。
• 选择度的值范围在 0.0 到 1.0 之间。
– 收集一组列的统计信息
– 针对复杂谓词 – 仅针对等式谓词
• 基于函数的索引的表达式统计信息
– 收集表达式的统计信息 – 针对谓词中使用的表达式
– 创建虚拟列
10-10
版权所有 © 2008,Oracle。保留所有权利。
使用参数控制优化程序的行为
可以使用下列初始化参数控制优化程序的行为: • CURSOR_SHARING • DB_FILE_MULTIBLOCK_READ_COUNT • OPTIMIZER_INDEX_CACHING • OPTIMIZER_INDEX_COST_ADJ
• PGA_AGGREGATE_TARGET
• 优化程序的下划线参数:
– OPTIMIZER_FEATURES_ENABLE
– OPTIMIZER_MODE
10-11
版权所有 © 2008,Oracle。保留所有权利。
启用查询优化程序的功能
• 可以将优化程序的行为设置成在以前版本的数据库中的 行为。
版权所有 © 2008,Oracle。保留所有权利。
键值 F 的位图
位图索引访问
create bitmap index CUST_COUNTRY on CUST(country_iso) SELECT CUST_LAST_NAME FROM CUST WHERE country_iso = 'FR'; ------------------------------------------------------------------------| Id | Operation | Name | Rows |Cost | ------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 2921 | 368 | | 1 | TABLE ACCESS BY INDEX ROWID | CUST | 2921 | 368 | | 2 | BITMAP CONVERSION TO ROWIDS| | | | |* 3 | BITMAP INDEX SINGLE VALUE | CUST_COUNTRY | | | ------------------------------------------------------------------------Predicate Information (identified by operation id): --------------------------------------------------3 – access(COUNTRY_ISO<‘FR’)

oracle数据库sql优化方案

oracle数据库sql优化方案

oracle数据库sql优化方案概述:在使用Oracle数据库进行开发和运维过程中,SQL语句的性能常常是一个关键问题。

本文将介绍一些基本的Oracle数据库SQL优化方案,旨在提高系统查询性能和响应速度。

1. SQL语句优化准则在进行SQL语句的优化之前,我们需要遵循以下准则:- 减少表之间的连接数量,尽量使用JOIN语句而不是子查询。

- 选择恰当的索引,合理利用索引可以提高查询效率。

- 避免使用SELECT *,仅选择需要的列。

- 尽量减少SQL语句中的函数使用,函数会增加查询的开销。

- 针对复杂查询,可以考虑使用分页查询或数据缓存等技术。

2. 查询计划分析查询计划是Oracle数据库优化的重要工具,通过分析查询计划可以找到潜在的性能问题。

可以使用以下工具进行查询计划分析:- 使用EXPLAIN PLAN命令生成查询计划。

- 使用SQL Trace功能记录SQL执行过程,通过跟踪文件进行分析。

- 使用Oracle Enterprise Manager等性能监控工具,查看查询计划和执行统计信息。

3. 索引优化索引是提高查询性能的重要手段,合理使用和优化索引可以显著提升系统的响应速度。

以下是一些索引优化的常用技巧:- 使用唯一索引替代非唯一索引,减少索引的冗余。

- 避免在过大的列上创建索引,可以使用函数索引或局部索引进行优化。

- 对经常用于查询的列创建索引,包括WHERE子句中经常使用的列和经常进行连接的列。

- 定期进行索引重建和统计信息收集。

4. 数据库配置优化除了对SQL语句进行优化,还可以通过调整数据库配置来提升性能:- 合理设置数据库的内存参数,包括共享池大小、缓冲池大小和PGA大小等。

- 设置适当的并发连接数,避免过度连接造成资源浪费。

- 配置硬盘存储方式,使用RAID技术提高数据存取速度。

- 使用数据库分区技术,将大表分成多个子表,提高查询效率。

5. 常见问题处理在优化SQL过程中,经常会遇到一些常见的性能问题,以下是一些处理方式:- 大数据量查询问题:可以考虑分页查询、增加合适的索引或引入缓存等手段来解决。

Oracle建立索引及SQL优化

Oracle建立索引及SQL优化

Oracle建⽴索引及SQL优化索引有单列索引复合索引之说如何某表的某个字段有主键约束和唯⼀性约束,则Oracle 则会⾃动在相应的约束列上建议唯⼀索引。

数据库索引主要进⾏提⾼访问速度。

建设原则: 1、索引应该经常建在Where ⼦句经常⽤到的列上。

如果某个⼤表经常使⽤某个字段进⾏查询,并且检索⾏数⼩于总表⾏数的5%。

则应该考虑。

 2、对于两表连接的字段,应该建⽴索引。

如果经常在某表的⼀个字段进⾏Order By 则也经过进⾏索引。

 3、不应该在⼩表上建设索引。

优缺点: 1、索引主要进⾏提⾼数据的查询速度。

当进⾏DML时,会更新索引。

因此索引越多,则DML越慢,其需要维护索引。

因此在创建索引及DML需要权衡。

创建索引: 单⼀索引:Create Index <Index-Name> On <Table_Name>(Column_Name); 复合索引: Create Index i_deptno_job on emp(deptno,job); —>在emp表的deptno、job列建⽴索引。

select * from emp where deptno=66 and job='sals' ->⾛索引。

select * from emp where deptno=66 OR job='sals' ->将进⾏全表扫描。

不⾛索引 select * from emp where deptno=66 ->⾛索引。

select * from emp where job='sals' ->进⾏全表扫描、不⾛索引。

如果在where ⼦句中有OR 操作符或单独引⽤Job 列(索引列的后⾯列) 则将不会⾛索引,将会进⾏全表扫描。

Sql 优化:当Oracle数据库拿到SQL语句时,其会根据查询优化器分析该语句,并根据分析结果⽣成查询执⾏计划。

oracle数据库sql优化

oracle数据库sql优化

千里之行,始于足下。

oracle数据库sql优化Oracle数据库是关系型数据库系统中的一种,在实际应用中,它的性能往往是关键因素之一。

为了提高Oracle数据库的性能,我们可以进行SQL优化。

SQL优化可以减少查询时间、减少资源消耗,提高数据库的整体性能。

首先,我们可以通过索引来优化SQL查询。

索引可以加快数据库的查找速度,减少查询的时间。

在选择索引时,我们可以根据查询的条件和数据的分布情况进行选择,合理选择索引可以大大提高查询效率。

另外,我们还可以考虑使用合适的查询语句。

比如,使用where子句来限制查询的范围,避免全表扫描;使用join来连接多个表,减少查询的次数;使用子查询来优化查询的复杂度等。

此外,在设计数据库时,我们也要考虑到数据的规范化和反规范化。

规范化有助于提高数据的一致性和可维护性,但在查询性能方面可能会受到一定的影响。

因此,对于经常被查询的数据,我们可以考虑进行反规范化,将其冗余存储在多个表中,以提高查询性能。

另外,我们还可以通过设置合适的数据库参数来优化SQL。

比如,通过调整SGA和PGA的大小来合理分配内存资源;通过调整数据库的缓冲池来提高缓存命中率;通过设置合适的日志模式来提高事务处理的效率等。

另外,一个高效的数据库应用还需要考虑到并发访问的问题。

通过合理的数据库设计和应用程序的编写,可以减少多个用户同时访问数据库时的冲突和阻塞,提高并发访问的效率。

第1页/共2页锲而不舍,金石可镂。

总之,通过合理的索引设计、合适的查询语句、数据库参数的优化和并发访问的处理,我们可以大大提高Oracle数据库的性能。

当然,在实际应用中,SQL优化是一个持续的过程,需要不断地进行监控和调整,以保持数据库的高性能。

oracle sql优化方法

oracle sql优化方法

Oracle SQL 优化是数据库性能优化的一个重要方面。

下面是一些 Oracle SQL 优化的方法:1. 使用索引:▪确保表中的列经常用于搜索和过滤的地方都有索引。

▪使用适当的索引类型,如位图索引、组合索引等。

▪避免在大型表上使用全表扫描,除非查询的数据量很大。

2. 使用合适的连接方法:▪避免使用笛卡尔积,确保连接条件是有效且有索引的。

▪使用 INNER JOIN、OUTER JOIN 等连接方法,根据实际需要选择合适的连接类型。

3. 适当使用 Hints:▪使用提示(Hints)可以强制 Oracle 使用特定的执行计划。

▪但使用提示时要小心,确保明白其影响,只在必要的情况下使用。

4. 分析执行计划:▪使用EXPLAIN PLAN或 SQL Developer 等工具来分析 SQL 语句的执行计划。

▪通过了解执行计划,可以识别潜在的性能问题并进行优化。

5. 使用合适的数据类型:▪使用合适大小的数据类型,避免使用过大或过小的数据类型。

▪对于字符串字段,使用 VARCHAR2 而不是 CHAR,以节省存储空间。

6. 避免在 WHERE 子句中使用函数:▪在 WHERE 子句中使用函数会导致索引无法使用,从而影响查询性能。

▪如果可能,尽量避免对列使用函数,或者使用函数索引。

7. 使用分区表:▪对大型表进行分区,可以提高查询性能和维护效率。

▪根据业务需求选择合适的分区策略。

8. 统计信息的维护:▪确保数据库中的统计信息是最新的,以确保优化器能够选择最佳的执行计划。

▪定期收集表和索引的统计信息。

9. 合理使用连接池和缓存:▪使用连接池减少连接的开销。

▪使用缓存来存储频繁使用的查询结果,减少数据库访问次数。

10. 限制返回的行数:▪当不需要所有数据时,使用ROWNUM或FETCH FIRST等机制来限制返回的行数。

▪避免在应用层过滤大量数据,应在数据库层面尽量减少返回数据量。

11. 分析瓶颈和性能问题:▪使用 Oracle 提供的性能监控工具,如 AWR 报告、SQL Trace 等来识别性能瓶颈。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle11g 基于SQL语句性能优化通过索引对SQL进行优化
主讲人:***
所在部门:运维部
一、概述
本文所介绍的索引案例是在使用的是Oracle11g 11.2.0.4 数据库运行的。

索引是使用最为普遍的一种优化SQL的方法,不同索引均有各自的优缺点。

实际优化中需要综合考虑各种环境因素对运行慢的SQL进行优化。

常见环境因素有:数据库表及索引的统计信息、列的柱状图,优化器的模式,表上是否有触发器,表上是否创建了物化视图日志,SQL语句是否使用提示符,当前会话的等待事件等。

Oracle数据库中索引可分为B-TREE索引、BitMap索引、全文索引三大类。

按索引列的数量不同可分为,单列索引,多列索引。

按列值是否唯一可分为唯一索引和非唯一性索引。

二、B-TREE索引
B-TREE索引常常用在OLTP数据库中,为了提高查询性,但同时一个表中索引数据多时会影响DML语句的性能,所以需要全面考虑增加索引后利弊。

2.1索引分类
主键索引、唯一键索引、非唯一键索引、多列组合索引。

当表在创建主键时系统会自动为主键列或列的组合上创建唯一索引,主键索引性能最好。

其它索引性能好坏取决于单列或多列的数据选择性,如果索引访问的数据小,性能相对较高,因为访问索引和表的块较少因而性能好。

2.2扫描方式
索引唯一扫描、索引范围扫描,全索引扫描,快速全索引扫描,索引跳跃扫描。

2.3上机实践
2.3.1 索引唯一扫描例子:
unique.txt
注意:由于唯一索引的列中可为空值。

如果查询条件中有如下写法,则无法走索引扫描。

因为b-tree索引中不存储空值。

(1)select * from tab where col is null
(2)select * from tab where col is not null
(3)select count(0) from tab;
其中(3)中的语句是否走索引取决于唯一索引的列上是否为非空,如果是非空,则会走“INDEX FAST FULL SCAN”快速索引扫描(采用并行索引扫描方式进行取读索引块,效率非常高)。

2.3.2 索引范围扫描例子
在非唯一性索引上的扫描通常都采用索引范围的扫描方式进行。

scan.txt scan2.txt
2.3.3 全索引扫描例子
全索引扫描指的是查询语句的所有列均在索引列中,同时需要访问全表的数据时使用。

indexfull.txt
2.3.4 快速全索引扫描例子
fast_fullscan.txt
2.3.5 索引跳跃扫描例子
skip.txt
2.4索引利弊
优点:当访问表中少量数据时可以提高查询的性能。

缺点:增加索引会降低DML语句的性能,尤其中表上索引多的时候尤为严重。

三、BitMap索引
位图索引常常用在在读为主的表中,准确地说是以读为主且创建位图索引的列上的唯一值较少的情况。

位图索引用于提高单位查询速度或多表关联的查询速度,一般多用在报表统计中或数据仓库中。

在DML操作的表中如果增加位图索引,不但不会提高查询性能,返而会因为位图索引锁的范围大而阻塞其它程序并发执行,使得其它运行运行变慢。

3.1索引分类
单列位图索引,多列位图索引。

3.2扫描方式
3.3上机实践
单位位图索引例子
多例位图索引例子
3.4索引利弊
优点:在只读表上的查询性能比B-TREE索引要高。

因为B-TREE索引中记录的是位的位信息,占用空间小,因而查询性能高。

缺点:若在有写操作的表上创建位图索引,位图索引
四、全文域索引
三、总结。

相关文档
最新文档