sql优化(查询大数据量时sql执行时间过长)

问题:Oracle数据库 sql查询的优化(成交额统计表的sql查询时间过长进行的优化)

解决办法:对sql语句中使用视图的部分替换为子查询,对查询表条件字段建立索引

引发的问题:在什么情况下建立索引,及建立索引后引发的开销有哪些

经查询oracle的索引机制,摘录如下:

索引可以提高数据查询的效率,并不仅仅在于数据库会自动按照顺序进行搜寻。另一个重要的方面是索引的按块维护策略。一本字典的目录,不仅仅将汉字按照字母表顺序进行排列,而且对其进行了分块处理。例如,一个目录可能的存储结构如图18-8所示。

用户在使用字典时,会首先分析目标字的开头字母,例如,汉字"查",首字母为C,那么用户不会从第一个生字"啊"顺序向下查找;而是直接跳转到C块,然后从C块的第一个汉字"才"进行顺序查找。索引使用了同样的思想,当然,具体的分块策略要复杂得多。

但是,这引起了另外一个问题--维护字典的成本较高。因为字典目录所要维护的汉字索引较多,那么肯定会分为多页。第一次创建字典目录之后,各条目都会占据某页上的一行。现在设想向其中加入新的汉字"白",那么"白"应该处于"吧"与"包"之间。为了完成这一工作,则必须破坏"吧"之后的所有目录的位置及所在页--将其后所有目录条目后移,处于分页临界处的条目也需要进行换页。

由此推论oracle的索引并不是适合所有的情况,追求查询与插入表速度之间的平衡时一定不能多建索引,要有充分的考虑和评估。当一个表中的数据大部分的作用的是用来查询的话,对其更新和插入操作过少的话,这个时候在优化查询的时候就可以考虑对其增加索引;当一个表会被频繁的插入,更新的话,慎重对其增加索引,这会增加数据插入时的开销


你可能感兴趣的:(工作学习记录)