ORACLE索引使用总结(SQL优化及避免索引无效小技巧)

 

一:索引基本概念

oracle提供了两种方式,从表中读取所有行(即全表扫描),或者通过ROWID一次读取一行;

如果只访问大数据量表的5%的行,并且使用索引标识需要读取的数据块,这样花费的 I/O 较少,索引对性能的改进程度: 1.取决于数据的选择性 2.数据在表的数据块中的分步方式;

当数据分散在表的多个数据块时,最好是不使用索引,而是使用全表扫描,执行全表扫描时,oracle使用多块读取以快速扫描表,基于索引的读是单块读,因此在使用索引时的目标是减少完成查询所需的单块读的数量;

增强索引会降低 insert 语句的性能(因为需要同时对表和索引进行更新),大量行的 delete 操作,将会由于表中存在索引而变慢;

在SQL中有许多陷阱会使一些索引无法使用:

1.使用不等于运算符(NOT、<>)

索引只能查找表中已存在的数据,每当在 where 子句中使用不等于运算符时,其中被用到的列上的索引都将无法使用;例如:select cust_id, cust_name from customers where cust_rating <> 'aa'; oracle在分析表的同时收集数据分布的相关统计信息,通过这种方法,基于成本的优化器可以决定在where子句中对一些值使用索引,而对其他值不使用索引;

可以使用 create index 命令的 compute statistic 子句,在创建索引的同时分析它们;

2.使用 IS NULL

当在whe

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle SQL优化是指通过调整SQL查询语句和数据库结构,以提高查询性能和响应时间的过程。下面是一些常用的Oracle SQL优化技巧: 1. 使用合适的索引:确保表中的列上有适当的索引,以加快查询速度。可以使用EXPLAIN PLAN或者SQL Tuning Advisor来分析查询计划,并建议适当的索引。 2. 编写高效的查询语句:尽量避免使用SELECT *,只选择需要的列;使用合适的JOIN语句,避免不必要的连接;使用WHERE子句限制返回的行数。 3. 使用合适的数据类型:选择合适的数据类型可以减少存储空间和加速查询。例如,使用整数类型代替字符类型存储数字数据。 4. 避免使用函数和表达式:在WHERE子句中使用函数或表达式会导致索引失效,影响查询性能。尽量将函数和表达式移到SELECT列表之外。 5. 分析统计信息:确保收集和更新表和索引的统计信息,以便优化查询计划的生成。可以使用DBMS_STATS包来收集统计信息。 6. 优化连接操作:对于复杂的连接操作,可以考虑使用合适的连接方式(如HASH JOIN、NESTED LOOP等),以及使用连接池和缓存来提高性能。 7. 使用分区表:对于大型表,可以考虑使用分区表来提高查询性能。分区可以根据特定的列值将数据划分为更小的块,使查询更加高效。 8. 避免全表扫描:尽量避免全表扫描操作,可以通过合理使用索引、分区表等技术来避免全表扫描,以提高查询性能。 9. 使用Hint提示:可以使用查询提示(Hint)来指导优化器生成最优的执行计划。但是需要谨慎使用,因为错误的Hint可能导致性能下降。 10. 监视和调整数据库参数:根据实际情况,监视和调整数据库参数,以优化整体数据库性能。 综上所述,Oracle SQL优化需要综合考虑查询语句、索引、表结构、统计信息等多个方面的因素。通过合理的优化策略,可以提高查询性能和响应时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值