数据库有一个表,目前大概有100万条记录,目前项目还处于开发阶段,数据库没有做任何优化,所以执行一条
select * from .. order by .. 都要7-8秒,看Oracle的企业管理器,提示在这个表上的查询会导致大量的用户I/O等待,请问有哪些方法可以提高查询的性能?我刚刚接触Oracle开发,完全是菜鸟,还望各位大哥不吝赐教。多谢!

解决方案 »

  1.   

    1,100万,先用索引试试2,分区的话要看业务应用才行,不然如果有业务需要跨分区查询的话,就起不到提高查询效果的作用了3,用分析函数进行排序,不要直接order by cn整张表。
      

  2.   

    合理的结构
    良好的索引
    对大量数据避免不必要的order by
      

  3.   

    定时删除数据可以用job
    dbms_job包
      

  4.   

    order by或者fts可能是你这里的主要原因。对于返回的数量比较多的数据不要做order by。
      

  5.   

    如果有blob字段就放到别的表空间
    可以根据数据业务类型分簇,和数据新旧没有关系
    不过对oracle而言,百万数据实在不多,一般建索引就够了还有,检索数据其实不满,但显示出来就很慢了,你不会直接看100万条数据吧
      

  6.   


    我也是个oracle菜鸟,我提几点个人意见:
    1、select * from .. order by .. 在实际的项目应用中非常忌讳  select * ,  count(*)  这种写法,不要偷懒,必须要把所有需要查询出来的字段都列出来,比如: select t.id,t.name......
    2、而且最好多起“别名”  比如: select ...from emp e where... 常用的字段也要起 “别名”因为,数据库会把“别名”保存到内存,就不会每次都要访问表了
    3、对关键字段建立索引,就是绝大部分数据的这个字段都是不一样的,如果给一个重复率很高的字段建立了索引就会事倍功半,所以建立索引很关键,最好请教你身边oracle高手,建立正确的索引。
      

  7.   

    将where条件后的字段加上索引,不要用“*”,可能会快许多.100万不算很多 ,上千万才叫大!!
      

  8.   

    这个问题其实挺大的,要看具体情况,原数据量是100万,每天记录不是很大的话,建立索引应该没什么问题了,还要看返回结果的数量和查询条件,如果查询条件规范的话可以用这个条件进行分区,分区不是代表不能查到旧数据,不是分表存放的意思,oracle里有个分区的概念。
    返回结果很多的话用order by 肯定很慢。
    你最好把数据结构和sql语句贴出来,这样大家就可以给你一个满意的答复了。
      

  9.   

    建立索引。
    使用并行进行查询。
    平时使用包定时对重复记录进行删除。
    建立合理的数据库分区结构。
    使用表的别名进行查询。
    少用order by语句。
      

  10.   

    先做一下analyze 再去看执行计划。