oracle大数据表 如何建立索引

分类: 数据库2006-02-26 15:01 3209人阅读 评论(1) 收藏 举报

oracle数据库数据分析sql优化delete

大数据表,按某字段T(Varchar型的时间字段)分区,一个月一个分区。有常用业务字段A和B(其它字段并不重要),字段A值的重复率不高,B的重复率稍高。建有索引1:A,组合索引2:T,B。

对该表的常用查询有两种:通过条件T、A查询,通过条件T、B查询。

原来应用一直正常,近期由于其它分区表查询索引选择策略不优化的问题,对所有大数据表的分区表进行数据分析(1%抽样,对数据和索引进行分析),促使Oracle选用正确的更合适的索引。分析后,其它表的问题解决,但这个表分析后查询速度反面大幅下降。

查看数据库查询的计划,对条件T、A进行查询时(select * from talbe where t between someday and anotherday and a=something order by T desc),当T的范围在一个月分区时,选用索引1,速度在一秒以内,在T范围跨月时,系统选择索引2,速度很慢,要10几秒甚至更多,通过SQL语句强制使用索引1,速度很快,在一秒以内。

问题处理及疑问:

1、以为索引1没带时间信息,造成跨分区查询时选择了不够优化的索引,于是增加一索引3(T, A),重新进行数据分析,但数据库仍没有选择更优的索引,强制使用索引3,发现还没有原索引1快(4秒多)(这是个疑问1,理论上更快的索引反而速度慢,而且慢好几秒)。

2、把索引1修改为全局索引(原为分区索引),问题仍未解决。

3、经过一番折腾,发现有索引3时,把Where条件中的order by T desc的DESC去掉,数据库就能选择索引3的索引。(这是疑问2,DESC对索引选择策略有什么影响,在这里的影响是偶然还是必然?)

4、一个类似的表,有类似的T/A/B字段以及类似的索引2、索引3,当时速度慢,选择的是不优化的索引,就是通过对表进行数据分析,让数据库选择了较优化的索引,但同样的方法使用到这个表反而引起了问题,情况正相反(这是疑问3,数据分析的后果不确定嘛?)

5、这个表数据分析后发生了慢的问题,于是采用Delete分析结果的方法进行回退,但回退后数据库仍选择“错误”的索引(这是疑问4,为什么回退失败?数据库的查询计划和分析结果到底有什么关系?)

6、应用的SQL语句是个组合查询,条件语句是拼出来的,如果在SQL中直接指定索引,一来应用实现起来很麻烦(要根据不同的组合条件拼前面的指定索引语句),二来应用的数

Word文档免费下载Word文档免费下载:oracle大数据表 如何建立索引 (共3页,当前第1页)

你可能喜欢

  • 高级编程
  • oracle优化
  • SQL优化
  • Oracle执行计划
  • oracle学习
  • oracle视图

oracle大数据表 如何建立索引相关文档

最新文档

返回顶部